{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 3.决策树\n",
    "\n",
    "## 调包"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import operator\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3.1.决策树的构造\n",
    "### 3.1.1.计算给定数据集的香农熵\n",
    "信息量为概率的负对数，概率越小，信息量越大\n",
    "$$l(x_{i})=-log_{2}p(x_{i})$$\n",
    "香农熵为信息量的期望，统计平均\n",
    "$$H=E[l(x_{i})]=-\\sum_{i=1}^{n}p(x_{i})\\cdot log_{2}p(x_{i})$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from math import log\n",
    "\n",
    "def calcShannonEnt(dataSet):\n",
    "    \"\"\"\n",
    "    计算香农熵\n",
    "    参数：\n",
    "        dataSet -- 数据集，包含不同类型\n",
    "    输出：\n",
    "        shannonEnt -- 香农熵\n",
    "    \"\"\"\n",
    "    #求数据集大小\n",
    "    numEntries = len(dataSet)\n",
    "    #新建一个用于统计各个类型数目的字典\n",
    "    labelCounts = {}\n",
    "    #遍历数据集中的每个数据\n",
    "    for featVec in dataSet:\n",
    "        #类型为数据中的最后一项\n",
    "        currentLabel = featVec[-1]\n",
    "        #如果之前没有记录该类型\n",
    "        if currentLabel not in labelCounts.keys():\n",
    "            #添加新的一项记录\n",
    "            labelCounts[currentLabel] = 0\n",
    "        #计数\n",
    "        labelCounts[currentLabel] += 1\n",
    "    #初始化香农熵\n",
    "    shannonEnt = 0.0\n",
    "    #遍历所有类型\n",
    "    for key in labelCounts:\n",
    "        #计算概率，古典概型\n",
    "        prob = np.float(labelCounts[key])/numEntries\n",
    "        #根据公式计算香农熵\n",
    "        shannonEnt -= prob * log(prob, 2)\n",
    "    return shannonEnt"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.1.2.验证香农熵函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#创造点数据\n",
    "def createDataSet():\n",
    "    \"\"\"\n",
    "    创造测试数据\n",
    "    参数：\n",
    "        无\n",
    "    输出：\n",
    "        dataSet -- 数据集\n",
    "        labels -- 标签\n",
    "    \"\"\"\n",
    "    dataSet = [[1, True, 'yes'],\n",
    "              [1, True, 'yes'],\n",
    "              [1, False, 'no'],\n",
    "              [0, True, 'no'],\n",
    "              [0, True, 'no']]\n",
    "    labels = ['no surfacing', 'flippers']\n",
    "    return dataSet, labels"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "myDat = [[1, True, 'yes'], [1, True, 'yes'], [1, False, 'no'], [0, True, 'no'], [0, True, 'no']]\n",
      "myDat的香农熵 = 0.9709505944546686\n",
      "修改后的myDat = [[1, True, 'maybe'], [1, True, 'yes'], [1, False, 'no'], [0, True, 'no'], [0, True, 'no']]\n",
      "修改后的myDat的香农熵 = 1.3709505944546687\n"
     ]
    }
   ],
   "source": [
    "myDat, labels = createDataSet()\n",
    "print(\"myDat = {}\".format(myDat))\n",
    "print(\"myDat的香农熵 = {}\".format(calcShannonEnt(myDat)))\n",
    "myDat[0][-1] = 'maybe'\n",
    "print(\"修改后的myDat = {}\".format(myDat))\n",
    "print(\"修改后的myDat的香农熵 = {}\".format(calcShannonEnt(myDat)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.1.3.划分数据集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def splitDataSet(dataSet, axis, value):\n",
    "    \"\"\"\n",
    "    按给定特征划分数据集\n",
    "    参数：\n",
    "        dataSet -- 待划分的数据集\n",
    "        axis -- 划分的参照特征\n",
    "        value -- 分界线的特征值\n",
    "    \"\"\"\n",
    "    #新建存放划分后数据集的列表\n",
    "    retDataSet = []\n",
    "    #遍历数据集中的书籍\n",
    "    for featVec in dataSet:\n",
    "        #找到划分界限\n",
    "        if featVec[axis] == value:\n",
    "            #取之前的特征，不包括参照特征\n",
    "            reducedFeatVec = featVec[:axis]\n",
    "            #取之后的特征，不包括参照特征\n",
    "            reducedFeatVec.extend(featVec[axis+1:])\n",
    "            #添加到划分数据集中\n",
    "            retDataSet.append(reducedFeatVec)\n",
    "    return retDataSet"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.1.4.测试划分数据集函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "myDat = [[1, True, 'yes'], [1, True, 'yes'], [1, False, 'no'], [0, True, 'no'], [0, True, 'no']]\n",
      "myDat第一个特征为1的划分 = [[True, 'yes'], [True, 'yes'], [False, 'no']]\n",
      "myDat第一个特征为0的划分 = [[True, 'no'], [True, 'no']]\n"
     ]
    }
   ],
   "source": [
    "myDat, labels = createDataSet()\n",
    "print(\"myDat = {}\".format(myDat))\n",
    "print(\"myDat第一个特征为1的划分 = {}\".format(splitDataSet(myDat,0,1)))\n",
    "print(\"myDat第一个特征为0的划分 = {}\".format(splitDataSet(myDat,0,0)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.1.5选择最好的数据集划分方式"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def chooseBestFeatureToSplit(dataSet):\n",
    "    \"\"\"\n",
    "    选择最好的划分参照特征，也就是使得信息增益最大的划分方式\n",
    "    参数：\n",
    "        dataSet -- 数据集\n",
    "    返回：\n",
    "        bestFeature -- 最好的数据集\n",
    "    \"\"\"\n",
    "    #求特征数，-1是去掉标签\n",
    "    numFeatures = len(dataSet[0]) - 1\n",
    "    #求数据集的香农熵\n",
    "    baseEntropy = calcShannonEnt(dataSet)\n",
    "    #初始化最佳信息增益，和最好的参照特征\n",
    "    bestInfoGain = 0.0\n",
    "    bestFeature = -1\n",
    "    #遍历每个特征\n",
    "    for i in range(numFeatures):\n",
    "        #取每个数据的第i个特征值\n",
    "        featList = [example[i] for example in dataSet]\n",
    "        #把这些特征值作为一个集合\n",
    "        uniqueVals = set(featList)\n",
    "        #初始化划分后的熵\n",
    "        newEntropy = 0.0\n",
    "        #遍历集合中的特征值\n",
    "        for value in uniqueVals:\n",
    "            #取第i个特征值为value子集\n",
    "            subDataSet = splitDataSet(dataSet, i, value)\n",
    "            #计算概率\n",
    "            prob = len(subDataSet) / np.float(len(dataSet))\n",
    "            #计算划分后的熵，为各个子集熵的期望\n",
    "            newEntropy += prob * calcShannonEnt(subDataSet)\n",
    "        #计算信息增益\n",
    "        infoGain = baseEntropy - newEntropy\n",
    "        #如果当前以i特征划分得到的信息增益大于之前的最大值\n",
    "        if (infoGain > bestInfoGain):\n",
    "            #加冕为王\n",
    "            bestInfoGain = infoGain\n",
    "            bestFeature = i\n",
    "    return bestFeature"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.1.6.测试选择最佳划分方式的函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "myDat = [[1, True, 'yes'], [1, True, 'yes'], [1, False, 'no'], [0, True, 'no'], [0, True, 'no']]\n",
      "最好的划分参照特征是，特征“0”\n"
     ]
    }
   ],
   "source": [
    "myDat, labels = createDataSet()\n",
    "print(\"myDat = {}\".format(myDat))\n",
    "print(\"最好的划分参照特征是，特征“{}”\".format(chooseBestFeatureToSplit(myDat)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.1.7.递归构建决策树"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def majorityCnt(classList):\n",
    "    \"\"\"\n",
    "    求出现次数最多分类的名称\n",
    "    参数：\n",
    "        classList -- 类列表\n",
    "    返回：\n",
    "        sortedClassCount[0][0] -- 最多分类的名称\n",
    "    \"\"\"\n",
    "    #新建一个类计数器，字典\n",
    "    classCount = {}\n",
    "    #遍历类列表\n",
    "    for vote in classList:\n",
    "        #如果第一次遇到一个类\n",
    "        if vote not in classCount.keys():\n",
    "            #新建一个类计数器\n",
    "            classCount[vote] = 0\n",
    "        #计数+1\n",
    "        classCount[vote] += 1\n",
    "        #排序\n",
    "    sortedClassCount = sorted(classCount.iteritems(), key = operator.itemgetter(1), reverse = True)\n",
    "    return sortedClassCount[0][0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def createTree(dataSet, featLabels):\n",
    "    \"\"\"\n",
    "    创建决策树的递归函数\n",
    "    参数：\n",
    "        dataSet -- 数据集\n",
    "        labels -- 标签\n",
    "    返回：\n",
    "        myTree -- 创建的决策树\n",
    "    \"\"\"\n",
    "    #复制一份特征列表，因为后边要对labels做del，会改变原参数\n",
    "    labels = list.copy(featLabels)\n",
    "    #得到类列表\n",
    "    classList = [example[-1] for example in dataSet]\n",
    "    #如果类列表中只有一类\n",
    "    if classList.count(classList[0]) == len(classList):\n",
    "        #返回该类，结束函数\n",
    "        return classList[0]\n",
    "    #如果数据只有类，没有数据，也就是用尽所有特征也没法把数据划分成单一类\n",
    "    if len(dataSet[0]) == 1:\n",
    "        #返回最多的那一类，结束函数\n",
    "        return majorityCnt(classList)\n",
    "    #最佳分类特征的序号\n",
    "    bestFeat = chooseBestFeatureToSplit(dataSet)\n",
    "    #最佳分类标签\n",
    "    bestFeatLabel = labels[bestFeat]\n",
    "    #初始化决策树，字典型\n",
    "    myTree = {bestFeatLabel:{}}\n",
    "    #从列表中删除划分过的类\n",
    "    del(labels[bestFeat])\n",
    "    #得到特征值\n",
    "    featValues = [example[bestFeat] for example in dataSet]\n",
    "    #值的集合\n",
    "    uniqueVals = set(featValues)\n",
    "    #遍历所有值\n",
    "    for value in uniqueVals:\n",
    "        #剩余的类别名称\n",
    "        subLabels = labels[:]\n",
    "        #调用子节点递归函数\n",
    "        myTree[bestFeatLabel][value] = createTree(splitDataSet(dataSet, bestFeat, value), subLabels)\n",
    "    #返回给父节点迭代函数\n",
    "    return myTree"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.1.8.测试建立决策树的递归函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "myTree = {'no surfacing': {0: 'no', 1: {'flippers': {False: 'no', True: 'yes'}}}}\n"
     ]
    }
   ],
   "source": [
    "myDat, labels = createDataSet()\n",
    "myTree = createTree(myDat, labels)\n",
    "print(\"myTree = {}\".format(myTree))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3.2.在Python中使用Matplotlib注解绘制树形图\n",
    "### 3.2.1.Matplotlib注解"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#图形设置\n",
    "decisionNode = dict(boxstyle = \"sawtooth\", fc = \"0.8\")\n",
    "leafNode = dict(boxstyle = \"round4\", fc = \"0.8\")\n",
    "arrow_args = dict(arrowstyle = \"<-\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def plotNode(nodeTxt, centerPt, parentPt, nodeType):\n",
    "    \"\"\"\n",
    "    绘制节点\n",
    "    参数：\n",
    "        nodeTxt -- 点的内容\n",
    "        centerPt -- 中心点\n",
    "        parentPt -- 父节点\n",
    "        nodeType -- 点类型\n",
    "    返回：\n",
    "        无\n",
    "    \"\"\"\n",
    "    createPlot.ax1.annotate(nodeTxt, xy = parentPt, \\\n",
    "            xycoords = 'axes fraction', xytext = centerPt, \\\n",
    "            textcoords = 'axes fraction', va = \"center\", \\\n",
    "            ha = \"center\", bbox = nodeType, arrowprops = arrow_args)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [],
   "source": [
    "def createPlot():\n",
    "    \"\"\"\n",
    "    进行绘制\n",
    "    参数：\n",
    "        无\n",
    "    返回：\n",
    "        无\n",
    "    \"\"\"\n",
    "    fig = plt.figure(1, facecolor = 'white')\n",
    "    fig.clf()\n",
    "    createPlot.ax1 = plt.subplot(111, frameon = False)\n",
    "    plotNode('decisionNode', (0.5, 0.1), (0.1, 0.5), decisionNode)\n",
    "    plotNode('leafNode', (0.8, 0.1), (0.3, 0.8), leafNode)\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXwAAAD8CAYAAAB0IB+mAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XlcjXn/P/DXUUPWLI2lspRD2pNKZIsZaZCdsmVCYx/3\nLDdmGDKWmuVrGG6JLIlQlvyo7LLMJI2iZGmytZCJitB2+vz+cHdMN6akuqrzej4ePWaOc7l69Yl3\nH5/rel8fmRBCgIiIarxaUgcgIqLKwYJPRKQiWPCJiFQECz4RkYpgwSciUhEs+EREKqLEgu/m5obm\nzZvDxMTkje8LITBnzhzI5XKYmZnh0qVL5R6SiIjeX4kFf9KkSQgLC3vr+6GhoUhISEBCQgJ8fHww\nffr0cg1IRETlo8SC36tXLzRt2vSt7wcHB2PixImQyWSwtbVFZmYm7t+/X64hiYjo/b33Gn5KSgpa\nt26tfK2rq4uUlJQ3Huvj4wMrKytYWVnBx8fnfT81ERG9A/XK/GTu7u5wd3evzE9JRET/9d4zfB0d\nHSQlJSlfJycnQ0dH531PS0RE5ey9C76TkxP8/PwghEBERAQ0NTXRqlWr8shGRETlqMQlHRcXF5w+\nfRrp6enQ1dWFh4cH8vPzAQDTpk3DJ598gpCQEMjlctSrVw9btmyp8NBERPTuZHw8MhGRamCnLRGR\nimDBJyJSESz4REQqggWfiEhFsOATEakIFnwiIhXBgk9EpCJY8ImIVAQLPhGRimDBJyJSESz4REQq\nggWfiEhFsOATEakIFnwiIhXBgk9EpCJY8ImIVAQLPhGRimDBJyJSESz4REQqggWfiEhFsOATEakI\nFnwiIhXBgk9EpCJY8ImIVAQLPhGRimDBJyJSESz4REQqggWfiEhFsOATEakIFnwiIhXBgk9EpCJY\n8ImIVAQLPhGRimDBJyJSESz4REQqolQFPywsDAYGBpDL5fD09Hzt/aysLAwePBjm5uYwNjbGli1b\nyj0oERG9H5kQQvzTAQqFAh07dsSxY8egq6sLa2trBAQEwMjISHnMihUrkJWVBS8vL/z1118wMDDA\ngwcPULt27Qr/AoiIqHRKnOFHRkZCLpdDX18ftWvXhrOzM4KDg4sdI5PJ8PTpUwghkJ2djaZNm0Jd\nXb3CQhMR0bsrseCnpKSgdevWyte6urpISUkpdsysWbNw7do1aGtrw9TUFKtXr0atWq+f2sfHB1ZW\nVrCysoKPj085xKfy9PTpU9y9e1fqGERUQcrlou2RI0dgYWGB1NRUxMTEYNasWXjy5Mlrx7m7uyMq\nKgpRUVFwd3cvj09N5ejPP/+EtbU1Tp06JXUUIqoAJRZ8HR0dJCUlKV8nJydDR0en2DFbtmzB8OHD\nIZPJIJfLoaenh+vXr5d/WqpQnTt3xp49ezBmzBgEBQVJHYeIylmJBd/a2hoJCQm4ffs28vLysGvX\nLjg5ORU7pk2bNjhx4gQAIC0tDTdu3IC+vn7FJKYK1adPHxw9ehSff/45vL29pY5DROWoxCur6urq\nWLt2LRwcHKBQKODm5gZjY2NlMZg2bRoWLVqESZMmwdTUFEIIeHl5QUtLq8LDU8WwsLDA2bNn0b9/\nfzx48ACLFy+GTCaTOhYRvacSb8sk1ZWWlgZHR0fY2tri119/hZqamtSRiOg9sODTP3ry5AmGDRuG\npk2bwt/fH3Xq1JE6EhGVER+tQP+oUaNGCAkJAQA4Ojq+8e4rIqoeWPCpRHXq1MGuXbtgaGiIPn36\nIC0tTepIRFQGLPhUKmpqali7di2GDh0KOzs7JCYmSh2JiN4Rn39ApSaTyfDdd9+hRYsW6NWrFw4d\nOoTOnTtLHYuISokXbalM9u3bh2nTpmH37t2wt7eXOg4RlQKXdKhMhg8fzq5comqGSzpUZkVduQMH\nDkR6ejqmTZsmdSQi+gdc0qH3lpiYCAcHB0yYMAHfffcdu3KJqigWfCoX7MolqvpY8KncsCuXqGrj\nRVsqN+zKJaraWPCpXLErl6jqYsGncseuXKKqibdlUoUo6spt3rw5u3KJqghetKUKt3fvXkyfPp1d\nuUQS45IOVbgRI0Zg9+7dGDNmDPbu3St1HCKVxSUdqhT29vY4cuQIBg0ahL/++otduUQS4JIOVSp2\n5RJJhwWfKl1RV263bt2wZs0aduUSVRIWfJIEu3KJKh8v2pIk2JVLVPlY8EkyRV25nTp1YlcuUSVg\nwSdJqampYd26dRgyZAjs7Oxw69YtqSMR1Vi8LZMkJ5PJsHjxYrRo0QI9e/bE4cOHYWFhIXUsohqH\nF22pSinqyt2zZw/69OkjdRyiGoVLOlSlFHXljh49ml25ROWMSzpU5bArl6hicEmHqix25RKVLxZ8\nqtLYlUtUfljwqcp78uQJhg4dimbNmrErl+g98KItVXl/78r95JNP2JVLVEYs+FQtaGhoYNeuXTAw\nMGBXLlEZseBTtcGuXKL3U6qCHxYWBgMDA8jlcnh6er7xmNOnT8PCwgLGxsbo3bt3uYYkKlLUlfvV\nV1+hZ8+eiImJkToSUbVR4kVbhUKBjh074tixY9DV1YW1tTUCAgJgZGSkPCYzMxPdu3dHWFgY2rRp\ng4cPH6J58+YVHp5UG7tyid5NiTP8yMhIyOVy6Ovro3bt2nB2dkZwcHCxY3bu3Inhw4ejTZs2AMBi\nT5WCXblE76bEgp+SkoLWrVsrX+vq6iIlJaXYMTdv3kRGRgb69OmDLl26wM/P743n8vHxgZWVFays\nrODj4/Oe0YledeXOnj0bGzZskDoOUZVWLo9WKCgowB9//IETJ07gxYsX6NatG2xtbdGxY8dix7m7\nu8Pd3b08PiWRUufOnXH27Fk4ODggLS0NixYtYlcu0RuUWPB1dHSQlJSkfJ2cnAwdHZ1ix+jq6qJZ\ns2aoX78+6tevj169euHy5cuvFXyiitK+fXucP38eAwYMQFpaGrtyid6gxCUda2trJCQk4Pbt28jL\ny8OuXbvg5ORU7JghQ4bg3LlzKCgowPPnz3HhwgUYGhpWWGiiN2nRogXCw8Nx7do1uLi4IDc3V+pI\nRFVKiQVfXV0da9euhYODAwwNDTF69GgYGxvD29sb3t7eAABDQ0MMGDAAZmZmsLGxwZQpU2BiYlLh\n4Yn+V1FXrhCCXblE/4PP0qEaSaFQYPbs2bhw4QJCQkLQokULqSMRSY6dtlQjFXXlOjk5sSuX6L+4\nAQrVWNwrl6g4LumQSggKCsKMGTPYlUsqjUs6pBJGjhyp7Mrdt2+f1HGIJMElHVIZ/7tX7meffSZ1\nJKJKxSUdUjmJiYno378/XF1d2ZVLKoUFn1TSgwcP4OjoCDs7O6xevZpduaQSWPBJZRXtlaulpYXt\n27dzr1yq8XjRllRWUVduYWEhu3JJJbDgk0rT0NDA7t270bFjR9jb23OvXKrRWPBJ5ampqeE///kP\nnJyc0KNHD3blUo3F2zKJ8Kort3nz5uzKpRqLF22J/ge7cqmm4pIO0f8YOXIkdu3axa5cqnG4pEP0\nBn379lV25aanp3NrTqoRuKRD9A8SExPh4OAAV1dXLFy4kF25VK2p/JKOEAJRUVHgzz16k/bt2+Pc\nuXPYt28fZs+eDYVCIXUkojJT+YKfk5MDV1dXDBs2DKmpqVLHoSqoZcuWOH36NK5evcq9cqlaU/mC\nX7duXVy6dAlmZmYwNzeHr68vZ/v0Gk1NTYSGhrIrl6o1ruH/zZUrV+Dm5gZNTU1s3LgR+vr6Ukei\nKkahUGDWrFmIjIzkXrlU7aj8DP/vzMzMEBERgQEDBsDGxgarVq3imi0VU9SVO3jwYHblUrXDGf5b\nJCQkYMqUKcjNzYWvry+MjY2ljkRVzPr167Fs2TKEhITA3Nxc6jhEJVJbsmTJEqlDVEXNmjWDq6sr\nFAoFJk6ciJycHHTr1o3PTScla2trtG3bFs7OzrCxsUG7du2kjkT0j7ik8w9q1aqFadOmITo6Ghcu\nXICVlRUuXrwodSyqQoq6ckeNGsWuXKryOMMvBU1NTYwdOxaamppwdXXFw4cP0aNHD3zwwQdSR6Mq\nQE9PDx999BHGjx+Phg0bokuXLlJHInojzvBLSSaTYdy4cYiNjUVycjLMzc1x+vRpqWNRFdG5c2ec\nOXMGXl5e+P7773lrL1VJvGhbRgcPHsSMGTMwaNAgeHl5QVNTU+pIVAVwr1yqyjjDLyMnJydcvXoV\nhYWFMDExwaFDh6SORFXA37tyx44dy65cqlI4wy8HJ0+exNSpU9G1a1esXr0aH374odSRSGI5OTkY\nN24csrKysH//fjRs2FDqSESc4ZeHvn37IjY2Fq1atYKpqSkCAgK4hqviNDQ0sGfPHsjlcvTp0wcP\nHz6UOhIRZ/jl7cKFC5g8eTL09PSwfv166OrqSh2JJCSEgIeHB3bs2IGjR49CT09P6kikwjjDL2dd\nu3bFpUuXYGVlhc6dO8PHxweFhYVSxyKJyGQyLFmyBP/617/Qo0cPXL58WepIpMI4w69AcXFxmDx5\nMurVq4eNGzdCLpdLHYkkVLRXbmBgIHr37i11HFJBnOFXIBMTE/z2228YPHgwbG1t8fPPP6OgoEDq\nWCSRv3fl7t+/X+o4pII4w68kiYmJmDp1KrKzs+Hr6wtTU1OpI5FELl26hEGDBmHJkiXcK5cqValm\n+GFhYTAwMIBcLoenp+dbj7t48SLU1dURFBRUbgFrivbt2+PEiROYOnUq+vbti8WLF/MebRVlaWnJ\nrlySRIkFX6FQYObMmQgNDUV8fDwCAgIQHx//xuPmzZuH/v37V0jQmkAmk2Hq1KmIiYlBdHQ0unTp\nggsXLkgdiyQgl8tx/vx57N27l3vlUqUpseBHRkZCLpdDX18ftWvXhrOzM4KDg1877tdff8WIESPQ\nvHnzCglak+jo6CA4OBiLFi3CkCFD8MUXX+DZs2dSx6JK1rJlS4SHh7MrlypNiQU/JSUFrVu3Vr7W\n1dVFSkrKa8fs378f06dP/8dz+fj4wMrKClZWVvDx8Slj5JpBJpNhzJgxiIuLw8OHD2FmZoaTJ09K\nHYsqWdFeuQUFBRg4cCCePn0qdSSqwcrlLp25c+fCy8sLtWr98+nc3d0RFRWFqKgoXqz6Ly0tLfj7\n+2PNmjWYNGkSpk6diszMTKljUSViVy5VlhILvo6ODpKSkpSvk5OToaOjU+yYqKgoODs7o127dsp7\njQ8cOFD+aWuwgQMHIi4uDurq6jAxMcHBgweljkSVSE1NDevXr8egQYNgZ2eH27dvSx2JaiJRgvz8\nfKGnpydu3bolcnNzhZmZmYiLi3vr8a6uriIwMLCk09I/OH36tJDL5WLMmDEiLS1N6jhUydatWyd0\ndHRETEyM1FGohilxhq+uro61a9fCwcEBhoaGGD16NIyNjeHt7Q1vb+/K+Jmkcnr37o3Lly+jTZs2\nMDU1hb+/P2/dUyEzZszAqlWr0L9/f4SHh0sdh2oQNl5VcVFRUXBzc0Pr1q3h7e1d7AI61WwnT56E\ns7MzNmzYgGHDhkkdh2oAPlqhirOyskJUVBS6desGS0tLrF+/ng9jUxF9+/ZFWFgYZs6ciY0bN0od\nh2oAzvCrkfj4eEyePBm1a9fGpk2b0KFDB6kjUSX4888/4eDggE8//RTffvstZDKZ1JGomuIMvxox\nMjLCuXPnMHz4cHTr1g0//PADH8amAoq6coOCgjB79mz+C4/KjDP8aurWrVtwd3dHRkYGNm/eDHNz\nc6kjUQXLysrCkCFD0KJFC/j5+aFOnTpSR6JqhjP8akpfXx/Hjh3DzJkz8fHHH2PRokVsza/hNDU1\nERYWxq5cKjMW/GpMJpPBzc0NMTExiIuLQ+fOnfH7779LHYsqUFFXbvv27WFvb8+uXHonLPg1gLa2\nNvbt2wcPDw8MHz4cc+fORXZ2ttSxqIKoqanB29sbAwcORI8ePdiVS6XGgl9DyGQyjBo1CnFxccjI\nyICpqSmOHTsmdSyqIDKZDB4eHpg7dy569uzJvXKpVHjRtoYKDQ3FtGnT8NFHH+Gnn35CkyZNpI5E\nFSQwMBCzZs3Cnj17uFcu/SPO8GsoR0dHxMXFoW7dujAxMeEeqjXYqFGjEBAQwL1yqUSc4auAs2fP\nYsqUKTAzM8Ovv/6Kli1bSh2JKkDRXrkeHh6YOnWq1HGoCuIMXwUUrfHK5XKYm5vDz8+PD2OrgYr2\nyvX09MSyZcv4PabXcIavYi5duoTJkyejRYsW2LBhA9q2bSt1JCpn9+/fh6OjI3r27InVq1eXuDER\nqQ7+SVAxlpaWiIyMRK9evdClSxesW7eOrfo1TKtWrRAeHo7Y2FjulUvFcIavwq5fv47JkyejVq1a\n2LRpEwwMDKSOROUoJycH48aNw5MnT7Bv3z40bNhQ6kgkMc7wVVinTp1w9uxZjB49GnZ2dvD09ER+\nfr7UsaicFHXl6uvrsyuXALDgq7xatWph9uzZiIqKwqlTp9C1a1dER0dLHYvKCbty6e/UlixZskTq\nECS9xo0bY/z48ahbty4mTpyIjIwM2NnZQV1dXepo9J5kMhns7e1Rq1YtuLm5oV+/frw1V0Vxhk9K\nMpkMrq6uuHLlCm7evAkLCwucP39e6lhUTmbOnIn/+7//w8cff4wzZ85IHYckwBk+vaZBgwYYPXo0\nWrVqhU8//RR37txBz549+fz1GsDY2BiWlpYYM2YMOnTogE6dOkkdiSoRZ/j0ViNGjEBcXByys7Nh\namqKI0eOSB2JykG/fv0QGhqKGTNmYNOmTVLHoUrE2zKpVI4ePQp3d3f07t0bq1atQtOmTaWORO8p\nISEBAwYMgJubG7755hvulasCOMOnUunfvz/i4uLQuHFjmJiYICgoSOpI9J46dOiAc+fOITAwEHPm\nzGEDngrgDJ/e2fnz5zFlyhQYGRlh7dq1aNWqldSR6D0U7ZXbsmVLbNu2jddqajDO8Omd2dnZITo6\nGoaGhjA3N8eWLVv4oK5qrGiv3Pz8fAwaNIh75dZgnOHTe4mJiYGbmxu0tLTg4+ODdu3aSR2Jykih\nUGDGjBm4dOkSDh8+jObNm0sdicoZZ/j0XiwsLBAZGYl+/frBysoKa9asgUKhkDoWlUFRV66joyO7\ncmsozvCp3Ny4cQNTpkyBQqGAr68vDA0NpY5EZbRu3TqsXLkSISEhMDMzkzoOlRM2XlG50dLSwqRJ\nk5CXl4eJEyciPz8f3bp1g5qamtTR6B3Z2NhAV1cXLi4u6Nq1K/dNqCE4w6cKce/ePXz22WdITU3F\n5s2b0aVLF6kjURmcOHECLi4u8PHxwdChQ6WOQ++JM3yqEJqamhg3bhwaNGgAV1dXPHr0CHZ2dvjg\ngw+kjkbvQF9fH3379sX48eOhqakJS0tLqSPRe+BFW6owMpkMEyZMwJUrV3D79m2Ym5vzoV3VUJcu\nXRAeHo4VK1Zg+fLlvAW3GuOSDlWaAwcOYObMmRgyZAg8PT3RqFEjqSPRO7h//z4GDBiA3r1745df\nfuFeudUQv2NUaYYOHYq4uDjk5eXBxMQEISEhUkeid9CqVSucOXMGV65cwbhx45CXlyd1JHpHpSr4\nYWFhMDAwgFwuh6en52vv79ixA2ZmZjA1NUX37t1x+fLlcg9KNUOTJk2wadMmbN68GbNmzcKECROQ\nnp4udSwqpaKu3NzcXAwcOJBdudVMiQVfoVBg5syZCA0NRXx8PAICAhAfH1/sGD09PYSHhyM2NhaL\nFi2Cu7t7hQWmmuGjjz5CbGwstLS0YGpqij179nBtuJrQ0NBAYGCg8oIu98qtPkos+JGRkZDL5dDX\n10ft2rXh7OyM4ODgYsd0794dTZo0AQDY2toiOTm5YtJSjVK/fn2sWrUK+/fvh4eHB4YNG4bU1FSp\nY1EpsCu3eiqx4KekpKB169bK17q6ukhJSXnr8b6+vnB0dHzjez4+PrCysoKVlRV8fHzKEJdqIltb\nW1y6dAlmZmYwNzfHpk2bONuvBmQyGZYuXYo5c+agZ8+euHLlitSRqATlukP1qVOn4Ovri3Pnzr3x\nfXd3dy730BvVqVMHS5cuxciRI+Hm5oaAgABs3LgR+vr6UkejEsyaNQvNmzfHRx99hKCgIPTq1Uvq\nSPQWJc7wdXR0kJSUpHydnJwMHR2d1467cuUKpkyZguDgYDRr1qx8U5LKMDMzQ0REBAYMGAAbGxus\nWrWKD2OrBkaPHo2dO3di5MiROHDggNRx6G1ECfLz84Wenp64deuWyM3NFWZmZiIuLq7YMXfv3hXt\n27cX58+fL+l0RKV28+ZN0atXL9G1a9fX/sxR1RQVFSVatWolNm7cKHUUeoMSZ/jq6upYu3YtHBwc\nYGhoiNGjR8PY2Bje3t7w9vYGACxduhSPHj3CjBkzYGFhASsrqwr/QUU1X4cOHXDq1ClMmjQJvXv3\nxtKlS3nvdxX3967cFStW8FpMFcNOW6oWkpKSMH36dNy7dw++vr6wtraWOhL9A3blVk0s+FRtCCEQ\nEBCAL774AhMmTICHhwfq1asndSx6i6ysLDg5OUFbWxvbtm1D7dq1pY6k8vhjl6oNmUyGsWPHIjY2\nFsnJyTAzM8Pp06eljkVvoampiSNHjhTryr137x4WLVokdTSVxRk+VVsHDx7EjBkzMHDgQPzwww/Q\n1NTE8ePHUadOHfTs2VPqePRfCoUC06dPR3R0NPbs2QNLS0vEx8ejVatWUkdTOZzhU7Xl5OSEq1ev\nQggBExMTHDp0CLVq1YKrqytevHghdTz6LzU1NWzYsAGOjo5wcHCAg4MDtm3bJnUslcQZPtUIJ0+e\nxNSpU9G1a1c8ffoUNjY2XDqoQsaPH4/GjRujoKAAQUFBqF+/Pu7cuQOZTCZ1NJXCGT7VCG3atMHm\nzZvRsGFD/P777/jhhx9w9+5dqWPRfy1atAht2rTBjRs3kJ2djXv37iEwMFDqWCqHM3yqEX799Vf4\n+fkhKSkJjx49QkFBAaytrREZGSl1NPofT58+xdatWzFo0CDo6elJHUelcIZPksvJycHRo0chhEB+\nfj7CwsKgUChQWFiIsLAw5OfnQwiBo0ePIicnB0IInDx5EtnZ2QCAs2fPYvz48bh48SL279+P27dv\n4/r161iwYIHy6ZsxMTHKGf/Vq1eRmJgIALhx4wauX78OALh16xZiY2MBvLzvPzo6GsDLe8qLfnCk\np6fjt99+A/DytsPw8HAAwLNnz3DixAkIIZCbm4sjR45ACIGCgoJiX8+RI0eQl5cHIQSOHTumvNZw\n6tQpPHnyBABw7tw5PH78GAAQERGBtLS0Chz9ytewYUPMnj0benp6EEIgLy+vXD44dy1ZuT48jehd\n5eTkYOjQoTh//jwmTJiA1NRUnDhxAkOHDoVMJsP+/fvRr18/aGtrY/v27ejatSssLS2xfv16mJqa\nwsHBAT/99BP09fUxbtw4LFu2DK1atcKMGTOwePFiaGpqYv78+fjmm29Qt25dLFmyBAsWLICamhpW\nrFiB+fPnAwA8PT3x7bffIj8/HytXrsTSpUvx/PlzfP/99/j555/x+PFjLFmyBD4+PkhJScGCBQsQ\nFBSEmzdv4l//+hdOnTqFmJgYTJ06FfHx8Th//jxcXFzw+PFjHDlyBIMGDYKGhgaCgoLQp08ftGvX\nDlu3boWVlRVsbW2xdu1aGBkZYfDgwfDy8kK7du3g6uqK77//Hi1atEB4eHiVvqvlzp07uHr1KlJT\nU5GSkoKUlBQ8fvwYL168wPPnz/HixQvl/+fk5Chf5+TkQE1N7b3X8oUQUCgUqFOnDurWrfvaR716\n9ZT/bdy4MXR0dKCjowNtbW106tQJHTp0KKeRqNpY8ElSGzduxM2bN3HgwAF88803aNSoEQ4ePIjF\nixcDeHnr5cqVKxEVFYXg4GCsXr0aR48exb59++Dr64vdu3dj9+7dCAoKwsaNG7F9+3YcO3YMq1at\ngo+PDy5duoTly5djzZo1uHXrFhYvXgxPT09kZWVh4cKF+O6776CmpoaFCxfiiy++gJaWFhYtWoQp\nU6bAwMAA8+fPx5gxY9CtWzd8/fXX6N+/PwYOHIivvvoKXbt2xfLly/HVV1/B0NAQ+/fvx7x589Cy\nZUsEBwfj22+/Rf369XHw4EEsXboU+fn5OHjwILy8vBAREYEDBw5g3bp1CAkJQVBQEPz8/ODv749d\nu3bhwIEDWL9+PbZu3Qpvb2/MmzcPfn5+En+33mzr1q348ssvYWRkBC0tLeWHvr4+6tSpAw0NDeV/\niz7q1Kmj/FBTUyuXHIWFhcjNzUVubi5ycnKUH0Wvi/779OlTPHjwAHFxcXj06BHi4+Mxf/58fPnl\nl+WSoyrjGj5J6vHjx+jRowf69++PCRMmSB2nyomIiICHhwdOnjwJExMTqeO8Ubt27eDh4VFl85Uk\nOTkZEyZMQGZmZo1/BETN/uqoymvSpAl69OiBq1evSh2lSrp+/TrkcnmVXXLIzs5GWloaDA0NpY5S\nZrq6utDQ0FCJnfpY8ElSO3bswNGjR/Htt9++8f0NGzZg+/bt73xeNze3f3x/zpw5Zd6Ae8mSJXB0\ndFQ+uTMzMxODBw9+53McP368xOMmTJgAdXV1zJs3r0xZK9qNGzfQrl27Yssy79PlfPz4cYwcORKf\nffYZoqKiYGVlhTNnzijfnzt3LqKiokp9vqioKMydO7fE4/T19XHt2rUyZa5OWPBJUmZmZnj27Fm5\n/2XbvHnzP76/Zs0aNGzYsMznr1WrFg4ePFjm319a9+/fR0JCAuzs7Cr8c5XF9evX0a5du3I7X3Bw\nMBYuXIgNGzYAAFq0aFHi97I8tG3bViUKPi/akqTMzMwwffp0bN68GTY2NgBe7ot8+PBhNGnSBC1a\ntIChoSGSk5Ph5eWFjIwMaGhoYOHChWjXrh0ePXqElStXKvdZnj9/PszNzdGzZ0+cPXsW6enpWLBg\nAZ49e4aCggIsWLAAnTt3xuDBg7F9+3Y0btwY/v7+yuI9dOhQjB07FqmpqZgzZw4sLCxw5coVfPjh\nh/j555+hoaEBAHBxccHOnTsxdOjQYl+PEAJr1qzB+fPnIZPJMHnyZPTv3x9CCPzwww+4cOECWrZs\nCXX1V39wejvIAAAQTElEQVT1rl27hlWrVuH58+do3LgxlixZAi0tLQBAUFAQLC0tMWrUqAr/XpRF\nVlbWP/7g9PPzw/Hjx5GXlwd7e3t89tlnAIAvv/wSaWlpyMvLg7OzM4YPH46NGzciJiYGS5cuRe/e\nvWFnZ4cOHTqgoKAAERERsLW1LXbuyMhI/PLLL1AoFDAyMsKCBQtQu3Zt/Pbbb8rvlYWFhfL4Fy9e\n4IcffkBiYiIKCgrg7u6OPn36AAAaNWqkvC22JuMMnyR15swZrF+/Hl999RWAl8Xv6NGj2LlzJ1av\nXo34+HgAwPLly/H111/D398fc+fOhaenJwDgp59+gqWlJQICAuDv74/27dsXO39YWBhsbW2xc+dO\nBAQEoGPHjsXev3btGv7f//t/2LZtG7Zu3YoDBw4o78tPSkrCqFGjsGfPHjRs2BAnT55U/r6WLVvC\n3NwcISEhxc538uRJ3LhxAwEBAfjPf/6D1atXIz09HadOncLdu3cRGBgIDw8P5YbfBQUF+PHHH+Hl\n5QV/f384OTlh3bp1yvNNmjQJN2/exNq1a8tjuCtVREQEkpKSsG3bNuzcuRPXrl3DpUuXAADfffcd\n/P394efnh127diEzMxNTp06FoaEhli1bhs8//1x5Hjc3t9dm+bm5ufDw8MDKlSuxe/duKBQKBAUF\nITc3F8uXL8eqVavg7++PR48eKX/P5s2bYW1tDT8/P2zYsAFr1qxRuWcucYZPknry5AnU1dXRoEED\nAEB0dDTs7e2VM+levXohNzcXV65cUd4zD0C5fn7x4kV4eHgAePmQrqLzFDEyMsLSpUtRUFCAPn36\nwMDAoNj7MTExsLe3R926dQEA9vb2iImJQa9evaCtra08vlOnTsomriKffvopvvzyS/To0aPY+Rwc\nHKCmpoZmzZrB0tISV69eRXR0tPLXP/zwQ+UGLnfu3EFiYiJmzpwJ4OWTJYtm9wCgoaGBBg0aFCtc\n1UVERAQiIiIwbtw4AMDz589x7949WFpaYteuXcpHW6elpSEpKQmNGzd+43ksLS0BvBzbInfv3oW2\ntjbatm0LABg0aBACAwPRpUsXaGtro02bNgAAR0dH7N+/X5knPDwc/v7+AF7+0Hjw4IFKdfuy4JOk\nBg0ahIkTJ2LFihVYs2bNG48RQqBBgwbYuXPnO5/f0tISGzduxLlz5+Dh4YGxY8di0KBBpfq9H3zw\ngfL/1dTUkJubW+z9Nm3aoGPHjjh27Ng75/o7fX19bNmy5Y3v+fr6KnsDqhshBCZNmoQRI0YU+/Wo\nqChERkZiy5Yt0NDQgLu7+2tj+7/c3Nzg6+v7XvfsFy2rlec1h+qGSzokqdu3b8Pf3x+ffPIJgJcF\n+vTp08jJycGzZ89w9uxZaGhoQEdHR3lXixACN2/eBABYW1sjKCgIwMvZcdHjForcv38fTZs2xbBh\nwzBkyBDcuHGj2PudO3dWfr4XL17g1KlTxdZ9S+Lm5qacMRad79ixY1AoFMjIyEB0dDSMjY2L/Xp6\nerryTpO2bdsiIyOj2BJP0WMfAKBfv36Ijo5WPsKhqqlfvz6ePXv2xve6deuGgwcP4vnz5wCAhw8f\n4vHjx8jOzkajRo2goaGBO3fuIC4ursTPY2triydPniAhIQHAy3FLTU1FUlISACAkJASWlpZo164d\nUlNTlbdYHjlypFie3bt3Kx/BULR0B7x8NEb9+vXLMALVC2f4JKmjR4+ibt26sLe3B/By6eTjjz/G\n2LFj0aRJExgZGQEAvv/+e3h6esLX1xcFBQXo378/OnbsiK+++grLly9HcHAw1NTUMH/+fJiZmSnP\n/8cff8DPzw/q6uqoV6+ecvmnSKdOnZT/ygBeXrR90/LN27Rv3x6dOnVSFg97e3vExsbCxcUFMpkM\nc+bMgZaWFuzt7XHx4kWMGjUKLVu2hKmpKYCX/4rw8vLCTz/9hOzsbCgUCri4uCivRRgYGKBLly7Y\nsWOHcoyqEgMDg7c+ldTW1ha3b9/Gp59+CgCoV68evv/+e3Tv3h379u3DyJEj0bZt21I3bLm5uSm7\nYevUqYPFixdj3rx5you2I0aMQO3atfHtt9/i888/h4aGBjp37qz8gTN58mT8/PPPcHZ2hhAC2tra\n+OWXXwAA9+7dw9ixY993OKo8dtqSpBQKBZydnZGfn18tly0qWmBgIEJCQnD27FloampKHec1WVlZ\n0NbWxunTp6t1l6qTkxPOnDnz2kX/mqb6foeoRsjNzUVqaiqaNGkidZQqSVNTExkZGVX2lkFNTU1o\namri9u3bUkcps/T0dGRkZKjE2r7akiVLlkgdglTX+vXrcfz4cSxbtgzLli1DdHQ0rKys8OOPP+Ls\n2bOwtbXFmjVrcOTIEXTv3h2bNm3C3r17YWdnh507d8Lf31+5VrxhwwbY2trixIkT+OWXX2BlZYXI\nyEisXLkSFhYWiI+Ph4eHB4yMjHDv3j188803kMvlePz4MebNmwcdHR3k5ubi3//+N5o2bQo1NTV8\n/fXX0NDQQKNGjTBv3jzk5eWhZcuWmD9/PjIyMqCnp4eFCxciKSkJhoaG8PDwwLVr12BhYYEVK1Yg\nKioKNjY2+PHHHxEeHo5u3bph3bp1OHz4MLp3744tW7YgMDAQ3bt3x65du7Bt2zZ069YNhw4dgre3\nN1xcXHDr1i1ERERg2LBhUn+73qiwsBDLli3DrVu3EB8fj3v37imLaGZmJp4+fYqcnBzk5+ejsLAQ\nampqFf6vAYVCgZycHGRnZyMzMxOPHj3CgwcPkJycjD///BOXLl3CmTNncPToUWzevBmurq5wcHCo\n0ExVAZd0SFKZmZno168f7t+/DxsbG/z111+4c+cOjIyMIJPJcPXqVbRt2xYtWrTAxYsXoaWlBSMj\nI4SHh6NBgwbo2bMnQkNDoa6uDicnJ+zduxcAMHbsWPj7+6OwsBCTJ0/G5s2boVAoMG3aNGzYsAGF\nhYWYNWsW1q1bB5lMhhkzZmDt2rVQU1ODu7s7vL29oa6uDldXV2zduhW1atWCi4sLdu/eDeDlWn9o\naChyc3PRv39/XLhwAU+ePIGdnR3+/PNPPHjwAJaWlsjKykJiYiIMDAxQp04dxMbGQkdHB7q6urhw\n4QKaNm0Kc3NznDx5EvXq1UPfvn1x6NAhqKmpYdiwYdizZw9kMhlOnTr12i2lVYUQAr///jtiY2OV\nj0ZOTk5GVlbWPz4SuW7dusonZpbH45Hz8vKUT8jMz8+HhoYG6tWrBw0NjWKPSW7YsCF0dXWVj0ju\n1KkTevfuXa2XpEpNEEksIyNDbNq0SeTl5YmnT58KHx8f8eLFC/HixQvh4+Mjnj59KvLy8sSmTZvE\n48ePhUKhEFu3bhUPHjwQhYWFYseOHeLevXtCCCECAwNFQkKCEEKI4OBgcfXqVSGEEKGhoSI6OloI\nIcTJkydFRESEEEKIc+fOiTNnzgghhIiMjBTHjx8XQghx+fJlcfjwYSGEENeuXRP79+8XQgiRmJgo\ndu/eLQoLC0VycrLYvn27KCwsFA8fPhRbtmwRBQUFIjMzU/n1ZGdnCx8fH/H8+XORk5MjNm7cKJ48\neSLy8/OFr6+vePTokVAoFGLbtm0iNTVVFBYWip07d4o7d+4IIYTYu3evuHnzZmV8GypNYWGhyMnJ\nERkZGSIlJUUkJiaWy0dKSop4/PixePHihSgsLJT6y6ySOMMnIlIRKvBvGCIiAljwiYhUBgs+EZGK\nYMEnIlIRLPhERCqCBZ+ISEWw4BMRqQgWfCIiFcGCT0SkIkpV8MPCwmBgYAC5XK7cS/TvhBCYM2cO\n5HI5zMzMlPtWEhFR1VFiwVcoFJg5cyZCQ0MRHx+PgIAA5cbSRUJDQ5GQkICEhAT4+Phg+vTpFRaY\niIjKpsSCHxkZCblcDn19fdSuXRvOzs4IDg4udkxwcDAmTpwImUwGW1tbZGZm4v79+xUWmoiI3l2J\nBT8lJQWtW7dWvtbV1UVKSso7HwMAPj4+sLKygpWVFcaPH/8+uWsUHx8fqSNUGRyLVzgWr3AsXnmf\nsajUi7bu7u6IiopCVFRUsQ2EVR3/ML/CsXiFY/EKx+KVCi34Ojo6yp3hASA5ORk6OjrvfAwREUmr\nxIJvbW2NhIQE3L59G3l5edi1axecnJyKHePk5AQ/Pz8IIRAREQFNTU20atWqwkITEdG7Uy/xAHV1\nrF27Fg4ODlAoFHBzc4OxsTG8vb0BANOmTcMnn3yCkJAQyOVy1KtXD1u2bCnxE7u7u79/+hqCY/EK\nx+IVjsUrHItX3mcsuOMVEZGKYKctEZGKYMEnIlIRFV7w+ViGV0oaix07dsDMzAympqbo3r07Ll++\nLEHKylHSWBS5ePEi1NXVERQUVInpKldpxuL06dOwsLCAsbExevfuXckJK09JY5GVlYXBgwfD3Nwc\nxsbGpbpeWB25ubmhefPmMDExeeP7Za6bogIVFBQIfX19kZiYKHJzc4WZmZm4evVqsWMOHz4sBgwY\nIAoLC8Xvv/8ubGxsKjKSZEozFufPnxePHz8WQggREhKi0mNRdJy9vb1wdHQUgYGBEiSteKUZi4yM\nDGFoaCju3r0rhBAiLS1NiqgVrjRjsXz5cvHvf/9bCCHEw4cPRZMmTURubq4UcStUeHi4+OOPP4Sx\nsfEb3y9r3azQGT4fy/BKacaie/fuaNKkCQDA1tYWycnJUkStcKUZCwD49ddfMWLECDRv3lyClJWj\nNGOxc+dODB8+HG3atAGAGjsepRkLmUyGp0+fQgiB7OxsNG3aFOrqJd5sWO306tULTZs2fev7Za2b\nFVrwy/OxDNXdu36dvr6+cHR0rIxola60fy72799f4x/EV5qxuHnzJjIyMtCnTx906dIFfn5+lR2z\nUpRmLGbNmoVr165BW1sbpqamWL16NWrVUr1LkWWtmzXvR2MNcOrUKfj6+uLcuXNSR5HM3Llz4eXl\npZJ/mf9XQUEB/vjjD5w4cQIvXrxAt27dYGtri44dO0odrdIdOXIEFhYWOHnyJBITE/Hxxx+jZ8+e\naNSokdTRqoUKLfh8LMMrpf06r1y5gilTpiA0NBTNmjWrzIiVpjRjERUVBWdnZwBAeno6QkJCoK6u\njqFDh1Zq1opWmrHQ1dVFs2bNUL9+fdSvXx+9evXC5cuXa1zBL81YbNmyBfPnz4dMJoNcLoeenh6u\nX78OGxubyo4rqTLXzXK8zvCa/Px8oaenJ27duqW8CBMXF1fsmEOHDhW7+GBtbV2RkSRTmrG4e/eu\naN++vTh//rxEKStHacbi71xdXWvsRdvSjEV8fLzo27evyM/PF8+ePRPGxsYiNjZWosQVpzRjMW3a\nNLF48WIhhBAPHjwQ2tra4q+//pIgbcW7ffv2Wy/alrVuVugMv6Iey1AdlWYsli5dikePHmHGjBnK\n3xMVFSVl7ApRmrFQFaUZC0NDQwwYMABmZmaoVasWpkyZ8tbb9aqz0ozFokWLMGnSJJiamkIIAS8v\nL2hpaUmcvPy5uLjg9OnTSE9Ph66uLjw8PJCfnw/g/eomH61ARKQieEWMiEhFsOATEakIFnwiIhXB\ngk9EpCJY8ImIVAQLPhGRimDBJyJSEf8ffR3okKzAH/YAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x2aee9b575c0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "createPlot()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.2.2.构造注解树"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def getNumLeafs(myTree):\n",
    "    \"\"\"\n",
    "    获取叶节点的数目\n",
    "    参数：\n",
    "        myTree -- 决策树\n",
    "    返回：\n",
    "        numLeafs -- 叶节点的数目\n",
    "    \"\"\"\n",
    "    #初始化叶节点的数目\n",
    "    numLeafs = 0\n",
    "    #根节点的类名称\n",
    "    firstStr = list(myTree.keys())[0]\n",
    "    #根节点对应的字典\n",
    "    secondDict = myTree[firstStr]\n",
    "    #遍历字典中的每一个关键词\n",
    "    for key in list(secondDict.keys()):\n",
    "        #如果关键词下存放的还是字典，说明不是叶节点\n",
    "        if type(secondDict[key]).__name__ == 'dict':\n",
    "            #递归调用函数，统计子节点中的叶节点数目\n",
    "            numLeafs += getNumLeafs(secondDict[key])\n",
    "        #是叶节点，计数器++\n",
    "        else:\n",
    "            numLeafs += 1\n",
    "    return numLeafs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def getTreeDepth(myTree):\n",
    "    \"\"\"\n",
    "    获得树的深度\n",
    "    参数：\n",
    "        myTree -- 决策树\n",
    "    返回：\n",
    "        maxDepth -- 树的深度\n",
    "    \"\"\"\n",
    "    #初始化树的深度\n",
    "    maxDepth = 0\n",
    "    firstStr = list(myTree.keys())[0]\n",
    "    secondDict = myTree[firstStr]\n",
    "    for key in list(secondDict.keys()):\n",
    "        if type(secondDict[key]).__name__ == 'dict':\n",
    "            #深度 = 1 + 子树的深度\n",
    "            thisDepth = 1 + getTreeDepth(secondDict[key])\n",
    "        else:\n",
    "            thisDepth = 1\n",
    "        if thisDepth > maxDepth:\n",
    "            maxDepth = thisDepth\n",
    "    return maxDepth"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def retrieveTree(i):\n",
    "    listOfTrees = [{'no surfacing': {0: 'no', 1:{'flippers': \\\n",
    "                    {0: 'no', 1: 'yes'}}}},\n",
    "                  {'no surfacing': {0: 'no', 1: {'flippers': \\\n",
    "                    {0: {'head': {0: 'no', 1: 'yes'}}, 1: 'no'}}}}\n",
    "                  ]\n",
    "    return listOfTrees[i]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "retrieveTree(1) = {'no surfacing': {0: 'no', 1: {'flippers': {0: {'head': {0: 'no', 1: 'yes'}}, 1: 'no'}}}}\n",
      "叶节点数 = 3\n",
      "层数 = 2\n"
     ]
    }
   ],
   "source": [
    "print(\"retrieveTree(1) = {}\".format(retrieveTree(1)))\n",
    "myTree = retrieveTree(0)\n",
    "print(\"叶节点数 = {}\".format(getNumLeafs(myTree)))\n",
    "print(\"层数 = {}\".format(getTreeDepth(myTree)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.2.3绘制决策树"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [],
   "source": [
    "def plotMidText(cntrPt, parentPt, txtString):\n",
    "    \"\"\"\n",
    "    绘制注释\n",
    "    参数：\n",
    "        cntrPt -- 中心点位置\n",
    "        parentPt -- 父节点位置\n",
    "        txtString -- 文本字符串\n",
    "    返回：\n",
    "        无\n",
    "    \"\"\"\n",
    "    #绘制注释的坐标位置\n",
    "    xMid = (parentPt[0] - cntrPt[0]) / 2.0 + cntrPt[0]\n",
    "    yMid = (parentPt[1] - cntrPt[1]) / 2.0 + cntrPt[1]\n",
    "    #绘制注释\n",
    "    createPlot.ax1.text(xMid, yMid, txtString)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def plotTree(myTree, parentPt, nodeTxt):\n",
    "    \"\"\"\n",
    "    绘制决策树\n",
    "    参数：\n",
    "        myTree -- 决策树\n",
    "        parentPt -- 父节点位置\n",
    "        nodeTxt -- 节点文本信息\n",
    "    返回：\n",
    "        无\n",
    "    \"\"\"\n",
    "    #求树的叶节点数和层数\n",
    "    numLeafs = getNumLeafs(myTree)\n",
    "    depth = getTreeDepth(myTree)\n",
    "    firstStr = list(myTree.keys())[0]\n",
    "    cntrPt = (plotTree.xOff + (1.0 + np.float(numLeafs)) / 2.0 \\\n",
    "             / plotTree.totalW, plotTree.yOff)\n",
    "    plotMidText(cntrPt, parentPt, nodeTxt)\n",
    "    plotNode(firstStr, cntrPt, parentPt, decisionNode)\n",
    "    secondDict = myTree[firstStr]\n",
    "    plotTree.yOff = plotTree.yOff - 1.0 / plotTree.totalD\n",
    "    for key in list(secondDict.keys()):\n",
    "        if type(secondDict[key]).__name__ == 'dict':\n",
    "            plotTree(secondDict[key], cntrPt, str(key))\n",
    "        else:\n",
    "            plotTree.xOff = plotTree.xOff + 1.0 / plotTree.totalW\n",
    "            plotNode(secondDict[key], (plotTree.xOff, plotTree.yOff),\\\n",
    "                    cntrPt, leafNode)\n",
    "            plotMidText((plotTree.xOff, plotTree.yOff), cntrPt, str(key))\n",
    "    plotTree.yOff = plotTree.yOff + 1.0 / plotTree.totalD"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [],
   "source": [
    "def createPlotTree(inTree):\n",
    "    \"\"\"\n",
    "    进行绘制\n",
    "    参数：\n",
    "        inTree -- 决策树\n",
    "    返回：\n",
    "        无\n",
    "    \"\"\"\n",
    "    fig = plt.figure(1, facecolor = 'white')\n",
    "    fig.clf()\n",
    "    axprops = dict(xticks = [], yticks = [])\n",
    "    createPlot.ax1 = plt.subplot(111, frameon = False, **axprops)\n",
    "    plotTree.totalW = np.float(getNumLeafs(inTree))\n",
    "    plotTree.totalD = np.float(getTreeDepth(inTree))\n",
    "    plotTree.xOff = -0.5 / plotTree.totalW\n",
    "    plotTree.yOff = 1.0\n",
    "    plotTree(inTree, (0.5, 1.0), '')\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAWQAAADxCAYAAAD8x81kAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XlcTYn/x/FXWrUghaSRJSX7FmIMWccyDWNfv/Zt7Hxt\nI0UGw2CMNQxjyzb2NdLYJ6Jsac9SyBJJqajO74/5/nqMGTNDqnPrfp6Ph8eD273nvO+99e7j3LPo\nKIqiIIQQQnWF1A4ghBDid1LIQgihIaSQxUfZtWsXhoaGrFu3js2bN2NoaMiWLVtYu3YthoaG7N69\nm6VLl1K4cGGOHDnC/PnzMTExwc/PDzc3N8zMzDh//jwTJ06kWLFiBAQEMGLECCwtLbl69Sr9+/fH\nysqKmzdv0r17d8qUKUNoaChffvkl5cqVIyIigjZt2mBvb09UVBRNmzalatWqREdH4+zsTJ06dbh9\n+zZ16tShYcOGREdHU61aNZo2bUpUVBT29va0adOGiIgIypcvz5dffkloaChlypShR48eBAcHY2Vl\nRf/+/bl69SqWlpaMGDGCgIAAihUrxsSJEzl//jxmZmbMmDED2QIoPooiRDZdvHhRMTc3V7777jvF\nyspKKVmypPLdd98pJUqUUKysrJT58+crFhYWio2NjTJ//nylWLFiiq2trTJ37lylSJEiip2dnTJn\nzhzFxMREcXR0VDw8PJTChQsr1atXV2bMmKEYGRkp9erVU6ZOnaoYGBgozs7OyqRJkxR9fX2ladOm\nytixYxU9PT2ldevWyvDhwxU9PT2lQ4cOyoABAxQ9PT2lc+fOSu/evRU9PT2ld+/eSufOnRU9PT1l\nwIABSocOHRQ9PT1l+PDhSuvWrRU9PT1l7NixStOmTRV9fX1l0qRJirOzs2JoaKhMnTpVqVu3rmJk\nZKTMmDFDqVGjhlK4cGHFw8NDcXR0VExMTJQ5c+YoFSpUULy8vNR+W0Q+pqMo8itdZM+dO3do2LAh\nEyZMoGbNmiiKQokSJXj8+DGFChXC0tKSuLg4DAwMKF68OA8fPqRw4cIUK1aM+/fvY2pqStGiRYmN\njaVo0aKYmZlx7949LCwsMDEx4c6dO5QqVYrChQsTHR2NtbU1RkZGREZGUrZsWQwMDLImWz09PcLC\nwrCzs6NQoUKEhYVhb2+Pjo4OYWFhODg4oCgK4eHhODg4kJmZSWRkJA4ODqSnp3P79m0qVarE69ev\nuXfvHnZ2dqSmpvLgwQMqVKhASkoKjx49oly5ciQnJxMfH0/ZsmVJSkoiISGBlJQURo8ezY4dO2je\nvLnab43Ip6SQxUf5+eefmT59OgcPHlQ7iqqmTJmCg4MDK1asUDuKyMdkG7LItqioKCZPnsx///tf\ntaMAEBQURLdu3ejVqxepqakf9NhffvmFQ4cOZXvdw4cPZ+fOnfj4+GR7GULoqR1A5F/Pnj0jIyOD\nTz75RO0oZGRkcPToUfr370+7du0++PFdunT5qPVbWFhgbm7O3bt3P2o5QrvJJgvxUX788Ud+/PFH\nduzYwYMHDxgzZgy1atXi+vXrlChRgkWLFmFkZERYWBjz5s0jNTUVGxsbZs6cSZEiRd5alq+vL2vW\nrEFXVxdTU1PWrl3LwYMHuXXrFlOmTAFg3Lhx9OnTh3r16tGkSRO++uorLl26RIsWLfD29sbU1JQa\nNWowffp0Jk6cSGJiIunp6YwYMYJmzZoBcOjQIbZs2YKOjg52dnZ4enri5eWFsbExffv2ZejQoVSr\nVo3Lly+TlJSEm5sbtWvXJjU1FQ8PD6KiorC1teXJkydMmTKFKlWq4OHhQfHixfn555/R0dHJ67dB\nFBAyIYtsS0xMZMOGDbi4uGTdFhMTw7fffsuMGTOYOnUqfn5+tGvXDnd3d/773/9St25dVq9ezdq1\na5k4ceJby1u7di3Lly+nZMmSvHz58l/Xn5KSQrVq1Rg/fjwAsbGxfPrpp7Rs2ZL09HQWLlyIqakp\nCQkJ9O/fn6ZNmxIdHc369etZv349xYoV48WLF+9cdkZGBps2beLcuXOsXbuWlStXsmvXLszMzNi1\naxeRkZH07t076/6fffYZixYtIjIykkqVKmXn5RRCtiGL7Dt37hx3796lT58+WbdZW1vj4OAAQOXK\nlXnw4AFJSUm8fPmSunXrAtChQwcCAwP/sryaNWvi4eHB3r17ycjI+Nf16+rq/uMeDStWrKBHjx6M\nHDmSJ0+eEB8fT0BAAC1atKBYsWIAFC1a9J2P/f9fMo6Ojjx48ACAq1ev0qZNGwDs7Oyws7PLun+z\nZs2wtrbG29v7X3ML8XekkEW2tW3blq5duzJjxoys2/T19bP+rqur+17F+v+mT5/OyJEjefToEX37\n9iUhIQFdXd23DrZ4/fr1W+tasGABycnJPH36lJSUlKyvHT16lISEBLZs2YK3tzfFixd/67H/xsDA\n4IOew5o1azA2Nmby5MnvvQ4h/kwKWXyUtLQ09PT+ecuXqakpRYoUISgoCIDDhw9Tp06dv9wvNjaW\natWqMXz4cMzNzXn06BHW1taEh4eTmZlJXFwcwcHBACQlJfH69WvS09MxNjbm6tWrBAUFZZV3UlIS\n5ubm6OnpcfnyZR4+fAiAk5MTJ0+eJCEhAeBvN1m8S82aNTlx4gQA0dHRREZGZn1NV1eXN2/efNAv\nICH+TApZZNvhw4c5cOAAs2fP/tf7enh4sHTpUnr06EF4eDhDhgz5y32WLl1K9+7d6datGzVq1MDe\n3p6aNWtibW1N165d+f7773FwcODVq1eMGjUKHR0dvvnmG3R0dHBxcSEtLY2IiAjg9+k9JCSE7t27\nc/jwYcqVKwdAxYoVGThwIEOHDqVnz54sWbLkvZ9v165def78OV27dmXVqlVUrFgRU1NTAAYPHpy1\n3VqI7JK9LES2JScn4+LigqOjI2PGjMmTdSYkJDBq1Chq167NhAkT3tqjwcfHB29v71zb0yEjI4P0\n9HQMDQ2JjY1l5MiR7N69G319fXx8fFi+fDnnz5+nfPnyOb5uoR1kQhbZZmJiQo8ePfD398+T9T17\n9owRI0ZQv379v5QxQKtWrUhNTeXs2bO5sv7U1FQGDx5Mz549mTRpElOmTMnaZn7x4kWaNWuWNYkL\nkR26Hh4eHmqHEPnTxYsXGTZsGMuWLePGjRvcvn2bcuXKcerUKe7fv0/ZsmXx9fXlyZMn2NjYcOzY\nMV68eIG1tTWHDh0iJSWFUqVKsX//fjIyMihRogS7d+9GV1eX4sWLs3PnTgoXLkzRokVZv349Cxcu\npHnz5hQtWhRLS0uMjIzYunUrVlZW6OnpsXXrVurXr8+GDRtITEykfPnyvHnzBm9vb+zs7EhJSWHb\ntm04ODiQmJjIzp07qVy5MvHx8ezevZsqVaoQFxfHgQMHqFKlCjExMRw9epQqVapw+/ZtTp06xTff\nfEONGjWwtLSkTZs23Lp1iwsXLtC7d++sfaidnJzUfmtEPiWbLES23b17l0aNGtGgQQPOnz9PoUKF\naNCgARcvXiQzMxNnZ2cuX75MWloajRo14urVqyQnJ+Ps7ExwcDCJiYk0bNiQsLAwnj9/jpOTE9HR\n0Tx79ow6deoQExNDfHw8lSpVIiAgAAMDA+rWrcvTp0958eIFtra2vHjxgpcvX2JlZUVycjIpKSk8\nfPgQCwsLTE1N0dfXJzMzk0KFCvHmzRt0dXUxNDTkxYsXGBkZYWJiQlxcHGZmZhQtWpS7d+9mFX5Y\nWBjFixfHysqKGzduYGlpySeffEJgYCDFixenQoUKBAQEYG5uTuXKlfntt9/YvXs3TZs2VfutEfmU\nbLIQ2WZra8upU6d48+YNJ06cwM/Pj4yMDH799VeOHz9ORkYGp0+f5vDhwwCcPXuWffv2oaenx/nz\n59mxYwdGRkZcuHCBjRs3YmZmhr+/P6tXr8bCwgJ/f3+++eYbrl+/jpubG0uXLqVixYpcvnyZadOm\nUa1aNQIDAxk3bhz169cnKCiIwYMH07p1a8zMzOjatSvt27fn2rVrtG/fnu7du3P16lWaNm3KoEGD\nCAoKon79+owbN44rV65QrVo1pk2bxuXLl6lYsSJz584lICAAGxsbfvjhB/z9/bGwsGD16tX4+/tj\nZmbGxo0buXDhAoaGhmzbtk3KWHwUmZCFxoqOjqZFixaMHTuWcePGvffjFEWhUaNGjB49ml69euVi\nQiFylhSy0EgRERG0aNGCadOmMWLEiA9+/MmTJxkxYgS3bt361/2khdAUsslCaJyQkBBcXFxwd3fP\nVhkDNG/eHGtrazZv3pzD6YTIPTIhC41y8+ZNWrduzfz58+nXr99HLevs2bP069ePsLCwrEOhhdBk\nMiELjREUFETLli1ZvHjxR5cxQJMmTbC3t2f9+vU5kE6I3CcTstAIAQEBdOjQgZUrV9K5c+ccW+6l\nS5fo3LkzERERGBkZ5dhyhcgNMiEL1f3222+0b9+edevW5WgZA9SvX5/atWvj5eWVo8sVIjfIhCxU\ndebMGbp06cKmTZv4/PPPc2UdV69epW3btkRFRWFsbJwr6xAiJ8iELFRz8uRJOnfuzLZt23KtjAFq\n1arFp59+KleEFhpPJmShCh8fH/r27cuuXbvy5Oi24OBgXFxciIqKwszMLNfXJ0R2yIQs8tzBgwfp\n27cv+/bty7NDjatWrUrr1q1ZunRpnqxPiOyQCVnkqT179jBixAgOHjxI/fr183TdERERODs7ExER\ngbm5eZ6uW4j3IROyyDM7duxg5MiRHD16NM/LGKBSpUq4urqyePHiPF+3EO9DJmSRJzZv3syUKVPw\n8fGhevXqquW4c+cOdevWJSwsDEtLS9VyCPEuMiGLXLd+/XqmTZuGr6+vqmUMUK5cObp168aCBQtU\nzSHEu8iELHLV6tWrmTt3Lr6+vtjb26sdB/j96tY1a9YkODgYKysrteMIkUUKWeSaH3/8kcWLF+Pn\n50eFChXUjvOWcePGoSiK7HUhNIoUssgVCxcuZPXq1fj5+WFra6t2nL+Ii4ujSpUqXL9+HRsbG7Xj\nCAFIIYtcMGfOHDZv3szJkyc1uuymTJlCYmIiq1atUjuKEIAUsshBiqLg7u7O7t278fX1pXTp0mpH\n+kdPnz7FwcGBy5cvU758ebXjCCGFLHKGoihMmzaNI0eO4OvrS8mSJdWO9F5mzpxJbGysnDNZaAQp\nZPHRFEVhwoQJnD59mhMnTmBhYaF2pPeWkJBApUqVOH/+vMbsBSK0l+yHLD5KZmYmo0aN4sKFC5w8\neTJflTFAsWLFGDt2LLNmzVI7ihAyIYvsy8zMZNiwYdy6dYujR49SpEgRtSNly8uXL7Gzs8PPz4+q\nVauqHUdoMSlkkS0ZGRkMHDiQu3fvcujQIUxNTdWO9FEWLlzIxYsX+eWXX9SOIrSYFLL4YOnp6fTr\n148nT56wf//+AnEVjlevXmFnZ8fhw4epXbu22nGElpJtyOKDvH79mh49evD8+XMOHDhQIMoYwNjY\nmKlTpzJz5ky1owgtJhOyeG9paWl07doVHR0ddu7ciaGhodqRclRqaiqVKlXil19+oUGDBmrHEVpI\nJmTxXlJSUujYsSMGBgbs2rWrwJUxgJGRETNmzJApWahGCln8q1evXuHq6oq5uTnbt2/HwMBA7Ui5\nZsCAAYSHh3P27Fm1owgtJIUs/lFSUhLt2rXD2tqazZs3o6enp3akXGVgYIC7uzszZsxAtuaJvCaF\nLP7WixcvaNOmDZUqVWLDhg3o6uqqHSlP9OnTh7i4OE6ePKl2FKFlpJDFOz1//pxWrVpRq1YtvLy8\nKFRIe75V9PT0cHd3x83NTaZkkae056dMvLf4+HhatGhB48aNWb58uVaV8f/r3r07L1++5OjRo2pH\nEVpE+37SxD96/PgxLi4utG7dmsWLF6Ojo6N2JFXo6uoya9YsmZJFnpJCFlkePnxIs2bN6NSpE/Pm\nzdPaMv5/nTp1QlEU9u3bp3YUoSXkwBAB/H7hz+bNm/Of//yHb775Ru04GuPQoUNMmzaNa9euaeWm\nG5G35DtMcPfuXZo2bcrQoUOljP+kffv2mJiYsHPnTrWjCC0gE7KWi46Opnnz5kyYMIExY8aoHUcj\nnThxglGjRhEcHFzg98MW6pIJWcscO3YMBwcH7OzsmDRpEs2aNWPq1KlSxv+gZcuWlCpViq1bt751\n+8CBAylZsiTVqlVTKZkoaGRC1iIZGRnY29tz4sQJEhMTcXJyyjoqTfyzM2fO0L9/f8LCwtDX18+6\nzdTUlH79+nHz5k2VE4qCQCZkLXLp0iXs7OxITk6mXbt2dOrUSWuOvvtYn332GRUrVmTDhg1v3Va8\neHEVU4mCRgpZi9y/f5/ChQvTqlUrlixZwhdffMH9+/fVjpVveHp6MmfOHNLS0tSOIgooKWQtEhER\ngY+PDytXrqR79+5qx8l3GjZsSI0aNVi7dq3aUUQBJYWsJS5cuMCCBQtwdHTkq6++An7f97hMmTIq\nJ8tfZs+ezdy5c3n16pXaUUQBJIWsBU6fPk3Hjh3ZunUrCQkJ3L59m9evX7N9+3ZcXV3Vjpev1KlT\nB2dnZ1atWqV2FFEQKaJA8/X1VSwtLZWTJ08qiqIohw8fVipVqqRUqFBBmTNnjsrp8qcbN24oJUuW\nVDp37qxYWVkpenp6SpkyZZR169apHU3kc7LbWwF27Ngx+vXrx+7du2nSpInacQqUnj17Ur16daZP\nn652FFGASCEXUAcPHmTQoEHs378fZ2dnteMUOGFhYXz66adERERQrFgxteOIAkK2IRdAu3fvZvDg\nwRw+fFjKOJc4ODjQvn17lixZonYUUYDIhFzAbN++nfHjx3P06FFq1aqldpwCLTo6mvr16xMWFoaF\nhYXacUQBIBNyAbJp0yYmTJjAiRMnpIzzQIUKFejcuTMLFy5UO4ooIGRCLiB++ukn3N3d8fX1pXLl\nymrH0RoxMTHUrFmTkJAQSpUqpXYckc9JIRcAK1euZP78+Zw8eZJKlSqpHUfrjBkzBj09PRYvXqx2\nFJHPSSHncz/88ANLly7Fz8+P8uXLqx1HKz18+JCqVaty48YNOfJRfBQp5HxswYIFrFmzBj8/P8qW\nLat2HK02adIkUlJSWLFihdpRRD4mhZxPeXp6smXLFvz8/GQq0wBPnjyhcuXKBAYGYmtrq3YckU9J\nIecziqIwc+ZM9uzZw8mTJ7GyslI7kvifb775hkePHrFu3Tq1o4h8Sgo5H1EUhSlTpuDj44Ovry8l\nSpRQO5L4g+fPn1OpUiX8/f2xs7NTO47Ih6SQ8wlFURg/fjxnz57l+PHjciCChpo9ezYRERFs3rxZ\n7SgiH5JCzgcyMzMZNWoUgYGBHDt2TM6doMESExOxs7Pj9OnTODo6qh1H5DNSyBouIyODYcOGERoa\nypEjRyhSpIjakcS/+O677wgMDGTHjh1qRxH5jBSyBktPT2fgwIHExMRw8OBBTE1N1Y4k3kNycjIV\nK1bEx8eHmjVrqh1H5CNSyBrqzZs39OvXj/j4ePbt24exsbHakcQH+OGHHzh16hT79u1TO4rIR6SQ\nNdDr16/p2bMnqamp7N69GyMjI7UjiQ+UmpqKnZ0de/fuxcnJSe04Ip+Qs71pmLS0NLp06UJGRgZ7\n9uyRMs6njIyMmD59OjNnzlQ7ishHpJA1SEpKCl9++SVGRkbs2rULQ0NDtSOJjzBo0CBCQkI4f/68\n2lFEPiGFrCGSk5Pp0KEDFhYWeHt7o6+vr3Yk8ZEMDQ1xc3PDzc1N7Sgin5BC1gAvX76kXbt2lC1b\nlk2bNqGnp6d2JJFD+vXrR0xMDH5+fmpHEfmAFLLKXrx4QZs2bahcuTI//fQTurq6akcSOUhfXx93\nd3fc3NyQz8/Fv5FCVtHz589p1aoVdevWZfXq1RQqJG9HQdSzZ0+eP3+Oj4+P2lGEhpMGUMnTp09p\n3rw5TZo04ccff0RHR0ftSCKX6OrqMmvWLJmSxb+SQlbB48ePcXFxoW3btnz//fdSxlqgc+fOvH79\nmgMHDqgdRWgwKeQ89vDhQ5o1a0aXLl349ttvpYy1RKFChZg9ezYzZ84kMzNT7ThCQ0kh56HY2Fia\nNm1K3759cXd3lzLWMq6urhgYGPDLL7+oHUVoKDl0Oo/cuXOHFi1aMHLkSCZOnKh2HKGSY8eOMWHC\nBG7cuCF71Ii/kAk5D0RFRdGsWTPGjRsnZazl2rRpQ/Hixdm2bZvaUYQGkgk5l4WFhdGyZUvc3NwY\nOnSo2nGEBvj1118ZMmQIISEhckSmeItMyLno1q1bNG/enNmzZ0sZiywuLi5ZR2UK8UcyIeeS69ev\n8/nnn7Nw4UJ69+6tdhyhYc6fP0/v3r0JCwuTk0iJLDIh54LAwEBat27N0qVLpYzFOzVu3BhHR0d+\n+ukntaMIDSITcg67dOkSX3zxBV5eXnTs2FHtOEKDXb58mY4dOxIREUHhwoXVjiM0gEzIOej8+fN0\n6NCB9evXSxmLf1WvXj3q1avH6tWr1Y4iNIRMyDnk1KlTdOvWjS1bttC6dWu144h84vr167Ru3Zqo\nqChMTEzUjiNUJoWcA3x9fenVqxc7duzAxcVF7Tgin+nevTt16tTBycmJQ4cOsXjxYrUjCZXIJots\n+OPvsKNHj9KrVy/27NkjZSw+WGJiIh4eHixatIiYmBhiYmLUjiRUJBPyB0pPT8fR0ZFr167h6+vL\nkCFD2L9/Pw0bNlQ7msiHWrduTZkyZUhJSQF+v+L4nj17VE4l1CIT8gfy8/PD3NycI0eOMHToUI4c\nOSJlLLJtz549KIpCQEAABw4cyCpmoZ1kQv5AAwYMID09HV9fXw4fPoyNjQ0lS5ZUO5bI57Zs2cLA\ngQMpV64c4eHhascRKpFC/gCpqakUL14cAwMDWrVqxZkzZ2jcuLH8F1PkiIsXL3Lp0iVGjx6tdhSh\nEinkD7Bu3TqGDBlC7dq16d27N506daJChQpqxxJCFBCyDfkD9OvXjzt37hAYGMjEiROljMU7+fv7\n8+LFCwCCgoJ49OgR8PvJpu7duwdAdHR01qaJBw8ecP36dQDi4+MJCAgAIDk5mbNnzwLw5s0b/Pz8\nyMzMRFEU/Pz8ePPmDQDnzp0jKSkJgICAAOLj4wG4ceMG9+/fByAiIoKoqCgA7t27R0hISO6+CCJ7\nFC2Rnp6ueHt7K+PHj1dcXV2VqlWrKiYmJgrwlz8mJiZK1apVFVdXV2X8+PGKt7e3kp6ervZTEPnA\nsmXLFBMTE6V27drK8uXLlSJFiigVKlRQNmzYoJibmyulSpVSNm/erFhaWioWFhbKxo0bFRsbG6Vo\n0aLKmjVrFEdHR8XMzExZtGiR0qhRI8XExESZPn264urqqpiYmCiDBg1ShgwZopiYmCgdOnRQ3Nzc\nFBMTE8XZ2VlZvHixYmZmplSuXFlZu3atUrRoUaVMmTLKpk2bFAsLC8XS0lLZvHmzYmVlpZibmysn\nT55U++USf6IVmywURaF9+/bExcXx6aefUqZMGWxsbLCxscHU1PQv909KSiI2NpbY2Fju37/PuXPn\nKF26NIcOHZLLLom/defOHSpWrIi3tzdHjx7l5MmTLFq0iEuXLrFx40bmz59PXFwcixYt4ptvvqFw\n4cK4ubkxYsQIHB0dmTRpEl9++SVt27Zl3LhxODk5MWjQICZOnIi1tTVTpkxhxowZKIrCt99+y4IF\nC4iNjWXx4sVs2LCBixcvsmTJEo4fP86ePXtYuHAh4eHhrFy5ktmzZ/P69WvmzJnD+PHjURSFpUuX\n8vTpU7VfNvEHWlHIly5donv37mzfvh09Pb0Pfnx6ejrdu3dn586d1K9fPxcSioJAURQGDBhAZGQk\nixYtytb3Wl54/vw5gwcPZtKkSYwaNUrtOOIPtGIb8o0bN6hevXq2f0D09PSoXr06N2/ezOFkoiDR\n0dGhe/fuXL9+ndevX6sd52/FxcWRkJBA27Zt1Y4i/kQrCjk4OBhbW9uPWoatrS3BwcE5lEgURHFx\ncXTv3p3FixdjbGwMwPbt2+nSpQtt27blu+++A+CXX37h0KFDquV0dHRkyJAhUsgaSCsKOSQkhHLl\nyn3UMsqXL8+tW7dyJpAokMzMzKhYsSIXL17Mum3Xrl2sWLGCkSNHZt3WpUsXOnTokGs5FEUhMzPz\nb7+enp7OpUuXcHJyyrUMIns0cyNXDktISKBYsWJZ/37w4AFjxoyhVq1aXL9+nRIlSrBo0SLu3r3L\nvHnzSE1NxcbGhpkzZ1KkSBEAihUrRkJCglpPQeQDJiYmrF27lvr169O7d2+WLVvG/fv3GTNmDK6u\nrln38/LywtjYmL59+zJ06FDs7e0JDAwkPT2dmTNnUq1aNby8vLI+WE5ISKBfv3506tQJgE2bNuHr\n68vr169xcXFh2LBhPHjwgFGjRlGtWjVCQ0NZunQpXl5e3Lp1Cx0dHVxdXbOuXhMUFERgYCAHDhxQ\n5XUSf08rJuR3iYmJoWvXruzcuRMzMzP8/Pxwd3dn9OjRbN++HTs7O9auXat2TJGPJCYm0qNHDyZO\nnIiZmRnTp0+nRIkSeHl5Zf1if5fU1FS8vb2ZOnUqs2fPzro9MjKSVatWsWHDBtatW8eTJ0/w9/cn\nJiaGjRs34u3tTUhICIGBgcDb39MJCQk8fvyYnTt3smPHjrd+IdStWxcXFxd69eqVey+GyBatLWRr\na2scHBwAqFy5MrGxsbx8+ZK6desC0KFDh6xvdCHeR1paGi9evMDa2vqDHtemTRsA6tSpQ3JyMi9f\nvgSgadOmGBkZUaxYMerWrUtwcDD+/v74+/vTu3dv+vTpw507d7IONildujTVq1cHoEyZMty/f58F\nCxZw4cKFt05+X6hQIcqUKcPDhw9z4mmLHKQVmyzeRV9fP+vvurq6WT8EQmRXiRIl2L17N61bt8bH\nx+ed+7i/y5/3bf//f+vo6ODv74+pqSkPHz7k8ePHKIpC//796dy581uPefDgAUZGRln/LlKkCNu2\nbeO3335j9+7dnDhxAnd3d+D3q5Rs3bqVsLCwj3m6IhdoxYRsYmJCcnLyP97H1NSUIkWKEBQUBMDh\nw4epU6f3sM34AAAW50lEQVRO1teTkpLkEjviH6Wnp7Nw4UKaN2+etZfF+zh+/DgAV69exdTUNKvI\nf/31Vzw9PUlMTCQyMpJTp07h7OzMgQMHePXqFQCPHz/m2bNnf1lmQkICmZmZtGjRghEjRrxVvhUq\nVMDGxoZVq1Z9zNMVuUArJuTKlStz584dGjdu/I/38/DwyPpQr0yZMlkTBfx+FJajo2NuRxX52P37\n9/Hx8WHr1q0UKvT+s46hoSG9evXK+lDv/xkYGPDq1SsWLlzIyJEj+fnnnzE2Nubzzz9nwIABABgb\nG+Pp6fmX9T1+/JhZs2ZlXd3m66+/zvqaqalp1oeOf9xmLdSnFUfqrVy5kpMnTzJ9+vRsL2Pu3Lm0\nbNmSESNG5GAyUdCsWbMGT09Ptm/f/tYmhL8zdOhQxo0bR5UqVd66fcWKFezcuZPVq1dnDQJ79uzB\n19eXlStXflTGO3fuMHToUA4ePEijRo0+alkiZ2nFJosqVaoQGhpKdn/3KIpCaGjoX35ohPizJ0+e\nYGxs/EET8rvcunULKyurt/5X5urqyv3797ly5cpHLVtfXx9dXV3ZjVMDaUUhf/rpp+jp6eHp6cnp\n06eJjIz810vlpKSkEBkZyenTp5k9ezZ6enr/uslDaLc7d+7g5ubG3LlzOXr0KOPHjyc+Pp4zZ84w\nYsQIYmNjuXbtGkOHDiU0NJTo6GgKFSrEy5cvefToEWPGjMHHx4dHjx4RFBREkyZNSE1NxcPDAy8v\nLwBsbGz45ptvePPmDV5eXri7u5OamsrOnTv573//y4sXLzhx4gSjR48mLi6OgIAAhg0bRlRUFKGh\noQwbNownT54wduxY+vbtq/IrJv5MKzZZwO8fcixevJiAgACioqKIiYnBzMwMMzOzv9w3MTGRpKQk\nypYtS4UKFXBycmLChAlvHVwixJ8pisKoUaM4ePAgmZmZdOrUib1795KWlsaAAQPYvHkzb968YejQ\noaxZs4ZChQoxaNAg1q5di6GhId27d8fb25vU1FQsLCyyjrirV68eUVFRJCQkYGtrS0BAAGZmZlhZ\nWWFvb8+lS5fQ0dGhVatWHDt2jLS0NPr06cO2bdtIS0tj6NCh/PTTTyiKwpAhQ/Dy8kJfX59vv/2W\nQYMGqf2yiT/K27N9ao6MjAwlJiZGCQkJ+cufmJgYJSMjQ+2IIh/KzMxUNmzYoERHRyuKoijbt29X\nrl+/riiKohw6dEi5cOGCoiiKcvr0acXHx0dRFEW5cuWKsnv3bkVRFOXy5cuKmZmZEhISosTGxiqr\nV69W0tPTlefPnyvLli1TXr16pWzcuFGxtbVV4uPjlfT0dMXLy0uJiYlRMjMzlU2bNikhISGKoijK\nnj17lMuXLyuKoijHjx9XTp06pSiKovz222/KoUOH8u5FEe9NayZkIfKDWbNmcfv2bX7++ee/vU9m\nZiY1a9Zk3rx5uXpODJH3pJCF0BDPnj3L2gTxb5cH27t3L56enly+fPmjP0AUmkPeSSE0xPfff0/n\nzp3f61qNHTt2REdHh7179+ZBMpFXZEIWQgM8fvwYR0dHrl69yieffPJejzly5AiTJ0/m2rVr6Orq\n5nJCkRdkQhZCA3z33Xf06tXrvcsYoG3btpiZmbFjx45cTCbykkzIQqjswYMHWZcIK1269Ac91tfX\nl5EjR3Lr1i2NvYafeH8yIQuhsrlz5zJgwIAPLmOAFi1aYG1tzZYtW3IhmchrMiELoaK7d+9Sp04d\nQkNDKVGiRLaWcfbsWfr160dYWBgGBgY5nFDkJZmQhVDRnDlzGD58eLbLGKBJkybY29uzYcOGHEwm\n1CATshAqiYqKokGDBoSHh1O8ePGPWtalS5fo3LkzERER73WWOaGZZEIWQiWzZ89mzJgxH13GAPXr\n16dWrVqsWbMmB5IJtciELIQKQkND+eyzz4iMjPzHC6B+iKCgINq3b09kZOQHXbFEaA6ZkIVQgYeH\nBxMnTsyxMgaoXbs2jRo1YsWKFTm2TJG3ZEIWIo9dv36dNm3aEBkZmePXaQwODqZ58+ZERka+89Sy\nQrPJhCxEHnN3d2fy5Mm5ctHcqlWr0rJlS5YuXZrjyxa5TyZkIfLQlStX+PLLL4mIiKBw4cK5so7w\n8HAaNWpEZGSkXFQhn5EJWYg85ObmxvTp03OtjAHs7e1xdXVl8eLFubYOkTtkQhYij1y4cIGePXsS\nHh6OoaFhrq7r9u3b1KtXj7CwMCwtLXN1XSLnyIQsRB5xc3Nj5syZuV7GAOXLl6dr164sXLgw19cl\nco5MyELkgVOnTjF48GBCQkLQ19fPk3XGxsZSo0YNbt26hZWVVZ6sU3wcKWQhcpmiKHz22WcMGzaM\nPn365Om6x44di46ODj/88EOerldkjxSyELnMx8eH8ePHc+PGjTy/skdcXBxVq1bl2rVr2NjY5Om6\nxYeTQhYiFymKQoMGDZg0aRLdunVTJcPkyZN5+fIlq1atUmX94v1JIQuRiw4ePMiMGTMICgpS7erQ\nT58+xcHBgStXrlCuXDlVMoj3I3tZCJFLMjMzcXNzY/bs2aqVMYClpSUjR47E09NTtQzi/UghC5FL\n9uzZg76+Pq6urmpHYcKECezfv5+IiAi1o4h/IJsshMgFGRkZVK9encWLF/P555+rHQf4/eokoaGh\ncv09DSYTshC5YPv27Zibm9OmTRu1o2QZO3Ysx48fJzg4WO0o4m/IhCxEDktPT8fR0ZE1a9bg4uKi\ndpy3LFiwgICAAHbt2qV2FPEOMiELkcM2bdrEJ598onFlDPD1119z7tw5rl69qnYU8Q4yIQuRg16/\nfo29vT1bt26lcePGasd5p6VLl3Ly5EkOHDigdhTxJzIhC5GDfvrpJxwdHTW2jAGGDRtGUFAQly5d\nUjuK+BOZkIXIIampqdjZ2bF3716cnJzUjvOPVq9ezd69e/Hx8VE7ivgDmZCFyCFeXl7Uq1dP48sY\nYODAgYSHh3Pu3Dm1o4g/kAlZiByQnJyMnZ0dPj4+1KhRQ+0472XDhg1s3LiRX3/9FR0dHbXjCGRC\nFiJHrFixgs8++yzflDFA3759efDgAX5+fmpHEf8jE7IQHykxMRE7OztOnz6No6Oj2nE+iLe3N8uX\nL+f8+fMyJWsAmZCF+EhLly6lTZs2+a6MAbp3786LFy84evSo2lEEUshCfJRdu3Yxa9Yszpw5w/z5\n89WO88F0dXWZNWsWM2fO5M//WR44cCAlS5akWrVqKqXTPlLIQmRTRkYGQ4cO5auvviIiIoJt27Zx\n69YttWN9sK+++oqMjAz279//1u39+/fn2LFjKqXSTlLIQmSTj48PSUlJLFy4EAMDA3r06PGXUssP\nChUqxOzZs3FzcyMzMzPr9s8++4zixYurmEz7SCELkU2rV6+mUqVK2NraAmBjY8P9+/dVTpU9HTp0\nwNjYWE46pDIpZCGyIS4ujl9//ZWaNWuqHSVH6Ojo4Onpibu7O+np6WrH0VpSyEJkw7x582jfvj3P\nnj3Lui02NpYyZcqomOrjtGrVihIlSuDt7a12FK0lhSzEB4qJiWHLli0sXryYiIgIbt++zevXr9m+\nfbtGXK4pu3R0dJgzZw6zZs3izZs3asfRSlLIQnygb7/9liFDhmBtbc3y5cuz9kHu1q0bVatWVTve\nR2natCnly5fn559/pmfPnjg7OxMWFoaNjQ0//fST2vEKPDlST4gPcPv2bZycnAgLC8PCwkLtOLni\nt99+o0ePHoSHh2NoaKh2HK0iE7IQH2D27Nl8/fXXBbaMAZydnalWrRrr1q1TO4rWkQlZiPcUHh5O\n48aNiYiIoFixYmrHyVVXrlzB1dWVyMhIChcurHYcrSETshDvycPDg/Hjxxf4MgaoW7cuDRo0YNWq\nVWpH0SoyIQvxHm7evEmLFi2IiorC1NRU7Th54saNG7Rs2VKrnrPaZEIW4j14eHgwefJkrSqm6tWr\n4+LiwrJly9SOojVkQhbiXwQFBdGhQwciIiIwNjZWO06eCg0NpUmTJkRGRlK0aFG14xR4MiEL8S9m\nzpzJtGnTtK6MASpXrky7du1YsmSJ2lG0gkzIQvwDf39/unXrRkREhNbukxsVFUWDBg0IDw+Xs7/l\nMpmQhfgHM2fOZMaMGVpbxgAVK1bkq6++4vvvv1c7SoEnE7IQf+PMmTMMGDCA0NBQ9PX11Y6jqnv3\n7lG7dm1CQkIoWbKk2nEKLClkId5BURSaNWvGwIED+c9//qN2HI0wevRoDAwMWLRokdpRCiwpZCHe\nwdfXl1GjRnHz5k309PTUjqMRHj58SNWqVbl58ybW1tZqxymQpJCF+BNFUXB2dmbcuHH06NFD7Tga\nZeLEiaSlpbF8+XK1oxRIUshC/Mnhw4eZOnUq165do1Ah+dz7jx4/foyjoyOBgYFZl64SOUe+24T4\nA0VRcHNzY/bs2VLG71CyZEmGDRvGnDlz1I5SIMl3nBB/sHfvXnR0dOjYsaPaUTTWpEmT2Lt3L1FR\nUWpHKXBkk4UQ/5ORkUHNmjX57rvvaN++vdpxNNqsWbOIjo5m48aNakcpUGRCFuJ/du7ciZmZGe3a\ntVM7isYbN24cR44cITQ0VO0oBYpMyEIA6enpVK1alRUrVtCyZUu14+QL8+fP5+rVq2zfvl3tKAWG\nTMhCAFu3bqV06dK0aNFC7Sj5xqhRozh16hTXr19XO0qBIROy0Hpv3rzBwcGBjRs30qRJE7Xj5CtL\nlizhzJkz7N27V+0oBYJMyELrbdiwATs7OynjbBg+fDgBAQFcuXJF7SgFgkzIQqulpqZib2/Prl27\naNCggdpx8qUVK1Zw+PBhjhw5onaUfE8mZKHV1q5dS82aNaWMP8LgwYMJDg7mt99+UztKvicTstBa\nr169ws7OjsOHD1O7dm214+Rr69atY/v27fj6+qodJV+TCVlorZUrV9KoUSMp4xzwn//8hzt37nDq\n1Cm1o+RrMiELrfTy5Uvs7Ozw8/OjatWqascpEDZv3syaNWs4c+YMOjo6asfJl2RCFlpp2bJltGzZ\nUso4B/Xq1YunT59y/PhxtaPkWzIhC62TkJBApUqVOH/+PPb29mrHKVB27tzJ999/z8WLF2VKzgaZ\nkIXWWbJkCV988YWUcS7o0qULaWlpHDp0SO0o+ZJMyEKrxMfH4+DgQEBAAOXLl1c7ToG0b98+PDw8\nCAwMlHNKfyB5tYRWWbhwIV26dJEyzkVffvklenp67NmzR+0o+Y5MyEJrPHr0iCpVqnDt2jVsbGzU\njlOgHT16lEmTJnH9+nV0dXXVjpNvyIQstMb8+fPp06ePlHEe+PzzzylWrJicmvMDyYQstML9+/ep\nUaMGwcHBWFlZqR1HK/j5+TFs2DBCQkLQ09NTO06+IBOy0ArffvstgwYNkjLOQ82bN8fGxoZNmzap\nHSXfkAlZFHh3796lTp06hIWFYWlpqXYcrXLu3Dn69u1LWFgYBgYGasfReDIhiwJr8ODBJCYm4unp\nyciRI6WMVfDpp5/i4ODA+vXrOXjwIB4eHmpH0mhSyKLAOnbsGNeuXWP//v1MmDBB7ThaKTk5GU9P\nT+bMmcODBw+4d++e2pE0mmyyEAVW6dKladSoEY6OjsTExFC2bFk8PT3VjqVVnJ2dcXJyIjo6mqJF\ni6Knp8fGjRvVjqWxZEIWBdabN2/w9fVl+/btGBgYMHXqVLUjaZ0jR47w4MEDIiIi2L9/P2lpaWpH\n0mgyIYsCy9DQEF1dXdavX0+PHj3UjqO1FEXBy8uLr7/+mho1ahAUFKR2JI0lOweKAqt169bMmzeP\natWqqR1Fq+no6DB8+HDs7e0JCwtTO45GkwlZCCE0hEzIIt9JS0vjzp07xMTEkJGR8dbXdHR0sLKy\nokKFCpiamqqUULxLUlISjx494vHjxyQmJv7t/fT19SlZsiSlSpXCwsJCq84YJ4Us8oXdu3ezbNky\nIiMjefLkCaVLl8bKyuovh+RmZmby5MkTYmNjMTU1pUKFCnTv3p0xY8bI4bt57MyZM2zatInz589z\n9+5dMjMzsbS0xMLCAlNT0789gX1aWhrPnz/n6dOnJCcnY2lpSZ06dWjVqhUjR44s0AeYyCYLofEO\nHjzIiBEjGD9+PJUqVaJUqVL/Wq6ZmZnEx8dz9+5dVq9ejaurK7NmzcqjxCIkJITGjRszYMAAateu\nTdmyZTE2Nv7gq4i8efOGJ0+eEBwczC+//EKzZs34/vvvcym1+qSQhcbr1KkTtWrVokOHDtl6fFRU\nFJMnT+bOnTs5G0z8LTc3N2JiYhg9enSOLfP+/fsMHjyYx48f59gyNY32bJwR+VZISMhHXW7J1taW\nuLg4UlJScjCV+CfBwcFUqlQpR5dpbW1NSkoKz58/z9HlahIpZKHR0tPTuXv3LmXLls32MvT09Chb\ntqzscpWHQkJCcvyqLDo6OpQvX56QkJAcXa4mkUIWGu3u3btYWFhgZGT0UcspV64c4eHhOZRK/BNF\nUYiOjsbW1jbHl21ra1ug30f52FlotLS0NAoXLvzWbQ8ePGDMmDHUqlWL69evU6JECRYtWsTdu3eZ\nN28eqamp2NjYMHPmTIoUKQL8ftReamqqGk9BK71+/Trrl+jq1aspUqQIvXr1AmDFihUUL14869D2\n169f4+LiwrBhw0hJSWHq1Kk8fvyYjIwMBg8eTOvWrbOWa2hoWKAPv5YJWeRLMTExdO3alZ07d2Jm\nZoafnx/u7u6MHj2a7du3Y2dnx9q1a9WOKQBXV1cOHz4M/L73y/Hjx7GwsCAmJoaNGzfi7e1NSEgI\ngYGBXLhwgRIlSrBt2zZ27txJo0aNVE6ft6SQRb5kbW2Ng4MDAJUrVyY2NpaXL19St25dADp06EBg\nYKCaEcX/WFtbU7RoUUJDQ/H398fBwYFbt27h7+9P79696dOnD3fu3OHevXvY2dlx8eJFfvzxR4KC\ngrTu4B7ZZCE03rv2zNTX18/6u66uLi9fvszLSOI9KIqStd9xx44dOXToEPHx8bi6uhIQEED//v3p\n3LnzXx63ZcsWzp8/z6pVq3BycmLIkCF5HV01MiELjWZhYcHTp0/fWcp/ZGpqSpEiRbLOJHb48GHq\n1KmT9fX4+HhKlCiRq1nF73R0dDA3N+fZs2dZt7m4uHDhwgVu3bqFs7Mzzs7OHDhwgFevXgHw+PFj\nnj17xpMnTzAyMqJdu3b07duX0NDQt5YdHx9foK/8IhOy0GglS5ZER0eHZ8+eYWFh8Y/39fDwyPpQ\nr0yZMri7u2d97fbt2zg6OuZ2XPE/Dg4O3L59O+s909fXp169epiZmaGrq0vDhg25ffs2AwYMAMDY\n2BhPT09iYmJYunQphQoVQk9P7y/nsC7o76McqSc0XsOGDRkwYAD16tXL1uOTkpJo27YtSUlJWnWi\nGjUNGjSIkiVL0qVLF+D3D/P69OnD/Pnzs71PeVpaGs2bNycxMbHAns9CvjuFxqtTpw4XL17M9uP9\n/f2pXr26lHEeqlu3Lv7+/ln7JHfq1AknJ6ePOsAnICAAe3v7AlvGIBOyyAdiY2NxdnamXLlyVKxY\nkTJlymBjY4OVldVbH+7B22d7i42NJSYmhoCAAPbt20eTJk1UegbaJyUlBWdnZ5KSkqhZsyaffPIJ\n5ubmWFhYULx4cczMzP7xbG/Pnj3L+vPkyRNCQkIICQlh165dtGrVKo+fTd6RQhb5QnJyMocOHSIi\nIoKoqCgiIyP/8XzIFStWxM7OjooVK/L5559jZWWlUnLtlZ6ezrVr17hw4QLR0dHExcVlnQ/5xYsX\nf/s4Q0NDSpQoQalSpbCysqJ06dLUq1ePRo0aYW5unofPIO9JIQshhIaQjWpCCKEhpJCFEEJDSCEL\nIYSG+D93FG79Ihj/DQAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x2aee9c7b5c0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "myTree = retrieveTree(0)\n",
    "createPlotTree(myTree)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAWQAAADxCAYAAAD8x81kAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xd8jff///FHhgxJJDKIJIgIEWKvJHZRe2+qiFltpbWV\nkhZF0ZZWK4g9Y5dYIWaGUdQIMTJkWEEiQeY5vz/85PvRahuR5DpHXvfbzQ0n17mu5zk5eZ133tf7\neh0dtVqtRgghhOJ0lQ4ghBDiJSnIQgihIaQgi3eydetWDA0NWbFiBevWrcPQ0JD169ezfPlyDA0N\n2b59O4sWLcLY2Jh9+/Yxd+5cTExMCAoK4uuvv8bMzIzg4GDGjRuHhYUFZ8+e5ZNPPsHa2pqLFy8y\nePBgbG1tuXLlCn369MHe3p7r16/TpUsXHB0duXnzJm3atKFy5crcvn2bZs2aUa1aNSIjI/Hw8KBO\nnTpERUVRp04d3N3diYyMxM3NjWbNmnH79m0qV65MmzZtuHnzJhUqVKBLly5cv34de3t7+vbty9Wr\nV7G1tWXw4MFcvHgRa2trPvnkE86ePYuFhQXjxo0jODgYMzMzpk2bhswAineiFiKPTp8+rS5ZsqR6\n3rx5altbW3WpUqXU8+bNU9vY2KhtbW3Vc+fOVVtZWakdHBzUc+fOVVtYWKjLly+v/u6779QlSpRQ\nOzs7q2fNmqU2MTFRu7q6qn18fNTGxsbq6tWrq6dNm6Y2MjJS16tXTz158mS1gYGB2sPDQz1+/Hh1\nsWLF1M2aNVN7e3ur9fX11R9++KF61KhRan19fXXHjh3VQ4YMUevr66t79OihHjBggFpfX189YMAA\ndY8ePdT6+vrqIUOGqDt27KjW19dXjxo1Sv3hhx+q9fX11d7e3upmzZqpixUrph4/frzaw8NDbWho\nqJ48ebK6bt26aiMjI/W0adPUNWrUUBsbG6t9fHzUrq6uahMTE/WsWbPUTk5Oal9fX6W/LUKL6ajV\n8pYu8iY6Ohp3d3fGjh1LzZo1UavV2NjY8ODBA3R1dbG2tubevXsYGBhgaWnJ3bt3MTY2xsLCgvj4\neExNTTE3NycuLg5zc3PMzMy4c+cOVlZWmJiYEB0dTenSpTE2NiYyMhI7OzuMjIy4desW5cqVw8DA\nIGdkq6+vT0REBM7Ozujq6hIREUHlypXR0dEhIiICFxcX1Go1N27cwMXFBZVKxa1bt3BxcSErK4uo\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x2aee9da09e8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "myTree['no surfacing'][3] = 'maybe'\n",
    "createPlotTree(myTree)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "## 3.3.测试和存储分类器\n",
    "### 3.3.1.使用决策树执行分类"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def classify(inputTree, featLabels, testVec):\n",
    "    \"\"\"\n",
    "    使用决策树执行分类，递归函数\n",
    "    参数：\n",
    "        inputTree -- 输入决策树，字典\n",
    "        featLabels -- 特征名的列表\n",
    "        testVec -- 测试向量\n",
    "    返回：\n",
    "        classLabel -- 预测分类\n",
    "    \"\"\"\n",
    "    #根节点类型\n",
    "    firstStr = list(inputTree.keys())[0]\n",
    "    #根节点对应字典\n",
    "    secondDict = inputTree[firstStr]\n",
    "    #求根特征对应的特征序号\n",
    "    featIndex = featLabels.index(firstStr)\n",
    "    #遍历所有关键词\n",
    "    for key in secondDict.keys():\n",
    "        #匹配到了待分类向量的第featIndex个特征\n",
    "        if testVec[featIndex] == key:\n",
    "            #不是叶子节点，节点元素是一个字典\n",
    "            if type(secondDict[key]).__name__ == 'dict':\n",
    "                #对这个字典递归调用分类函数\n",
    "                classLabel = classify(secondDict[key],featLabels, testVec)\n",
    "            else:\n",
    "                classLabel = secondDict[key]\n",
    "    return classLabel"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.3.2.测试决策树分类函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "myDat = [[1, True, 'yes'], [1, True, 'yes'], [1, False, 'no'], [0, True, 'no'], [0, True, 'no']]\n",
      "labels = ['no surfacing', 'flippers']\n",
      "myTree = {'no surfacing': {0: 'no', 1: {'flippers': {False: 'no', True: 'yes'}}}}\n",
      "[1, 0]属于no\n",
      "[1, 1]属于yes\n"
     ]
    }
   ],
   "source": [
    "myDat, labels = createDataSet()\n",
    "print(\"myDat = {}\".format(myDat))\n",
    "print(\"labels = {}\".format(labels))\n",
    "myTree = createTree(myDat, labels)\n",
    "print(\"myTree = {}\".format(myTree))\n",
    "print(\"[1, 0]属于{}\".format(classify(myTree, labels, [1, 0])))\n",
    "print(\"[1, 1]属于{}\".format(classify(myTree, labels, [1, 1])))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.3.3.存储读取决策树"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def storeTree(inputTree, filename):\n",
    "    \"\"\"\n",
    "    存储决策树\n",
    "    参数：\n",
    "        inputTree -- 输入决策树\n",
    "        filename -- 文件名\n",
    "    返回：\n",
    "        无 -- 直接存储文件\n",
    "    \"\"\"\n",
    "    import pickle\n",
    "    #可写的文件指针\n",
    "    fw = open(filename, 'wb')\n",
    "    #存储决策树\n",
    "    pickle.dump(str(inputTree), fw)\n",
    "    #关闭指针\n",
    "    fw.close()\n",
    "\n",
    "def grabTree(filename):\n",
    "    \"\"\"\n",
    "    提取决策树\n",
    "    参数：\n",
    "        filename -- 文件名\n",
    "    返回：\n",
    "        tree -- 读取到的决策树\n",
    "    \"\"\"\n",
    "    import pickle\n",
    "    #打开只读文件指针\n",
    "    fr = open(filename, 'rb')\n",
    "    #载入文件内容\n",
    "    tree = pickle.load(fr)\n",
    "    return tree"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "读取到的决策树 = {'no surfacing': {0: 'no', 1: {'flippers': {False: 'no', True: 'yes'}}}}\n"
     ]
    }
   ],
   "source": [
    "storeTree(myTree, \"classifierStorage.txt\")\n",
    "loadedTree = grabTree(\"classifierStorage.txt\")\n",
    "print(\"读取到的决策树 = {}\".format(loadedTree))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3.4.预测隐形眼镜类型\n",
    "### 3.4.1.读取数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "fr = open(\"lenses.txt\")\n",
    "lenses = [inst.strip().split('\\t') for inst in fr.readlines()]\n",
    "lensesLabels = ['age', 'prescript', 'astigmatic', 'tearRate']"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.4.2.生成决策树"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "lensesTree = {'tearRate': {'reduced': 'no lenses', 'normal': {'astigmatic': {'yes': {'prescript': {'myope': 'hard', 'hyper': {'age': {'presbyopic': 'no lenses', 'pre': 'no lenses', 'young': 'hard'}}}}, 'no': {'age': {'presbyopic': {'prescript': {'myope': 'no lenses', 'hyper': 'soft'}}, 'pre': 'soft', 'young': 'soft'}}}}}}\n"
     ]
    }
   ],
   "source": [
    "lensesTree = createTree(lenses, lensesLabels)\n",
    "print(\"lensesTree = {}\".format(lensesTree))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nY2gAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x2aee9bd3908>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "createPlotTree(lensesTree)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
